- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在做一项学校作业,我只是坚持这方面的逻辑。基本上需要验证 1900 年到 2099 年之间的正则表达式(日期)。天数不能超过最大月天数; (即 6 月有 30 天,所以 31 天无效)以及考虑闰年,其中 2 月日期可以是 29。这是我到目前为止所拥有的,但是当代码在 TestHarness 中运行时,我不断收到验证错误。我想我在这里有很多逻辑但不确定如何解决。任何帮助都会很棒。
public class RegexValidator {
//class variables
private String DATE_REGEX = "^((19|20)\\d\\d)-(0?[1-9]|
1[012])-(0?[1-9]|[12][0-9]|3[01])$";
public RegexValidator() {
m_datePattern.compile(DATE_REGEX);
}
public boolean validDate(String date) {
Matcher matcher = m_datePattern.matcher(date);
int year = Integer.parseInt(matcher.group(1));//parse to calculate leap
String month = matcher.group(2);
String day = matcher.group(3);
if(matcher.matches()) {
matcher.reset();
if(matcher.find()) {
if(day.equals("31") && (month.equals("4") || month.equals("04") ||
month.equals("6") || month.equals("06") || month.equals("9") ||
month.equals("09") || month.equals("11"))) {
return false;
} else if(month.equals("2") || month.equals("02")) {
//accounts for leap year
if(year % 4 == 0) {
if(day.equals("30") || day.equals("31")) {
return false;
} else {
return true;
}
} else {
if(day.equals("29") || day.equals("30") || day.equals("31")) {
return false;
} else {
return true;
}
}
} else {
return true;
}
} else {
return false;
}
} else {
return false;
}
}
这是我遇到的错误列表:
Error validating date '1900-1-11'
Error validating date '1900-1-11'
---- test date 1892-02-29 - expected false
---- Exception calling validDate: null
---- test date 1976-02-29 - expected true
---- Exception calling validDate: null
Error validating date '1976-02-29'
Error validating date '1976-02-29'
---- test date 2001-02-29 - expected false
---- Exception calling validDate: null
---- test date 2002-13-02 - expected false
---- Exception calling validDate: null
---- test date 2003-01-31 - expected true
---- Exception calling validDate: null
Error validating date '2003-01-31'
Error validating date '2003-01-31'
---- test date 1964-03-31 - expected true
---- Exception calling validDate: null
Error validating date '1964-03-31'
Error validating date '1964-03-31'
---- test date 1965-4-31 - expected false
---- Exception calling validDate: null
---- test date 1954-4-30 - expected true
---- Exception calling validDate: null
Error validating date '1954-4-30'
Error validating date '1954-4-30'
---- test date 1901-5-33 - expected false
---- Exception calling validDate: null
---- test date 1901-5-15 - expected true
---- Exception calling validDate: null
Error validating date '1901-5-15'
Error validating date '1901-5-15'
---- test date 2016-05-31 - expected true
---- Exception calling validDate: null
Error validating date '2016-05-31'
Error validating date '2016-05-31'
---- test date 2006-06-31 - expected false
---- Exception calling validDate: null
---- test date 20016-06-29 - expected false
---- Exception calling validDate: null
---- test date 1934-7-4 - expected true
---- Exception calling validDate: null
Error validating date '1934-7-4'
Error validating date '1934-7-4'
---- test date 2016-07-31 - expected true
---- Exception calling validDate: null
Error validating date '2016-07-31'
Error validating date '2016-07-31'
---- test date 2011-8-19 - expected true
---- Exception calling validDate: null
Error validating date '2011-8-19'
Error validating date '2011-8-19'
---- test date 2111-8-31 - expected false
---- Exception calling validDate: null
---- test date 2011-09-30 - expected true
---- Exception calling validDate: null
Error validating date '2011-09-30'
Error validating date '2011-09-30'
---- test date 2111-9-31 - expected false
---- Exception calling validDate: null
---- test date 2011-10-1 - expected true
---- Exception calling validDate: null
Error validating date '2011-10-1'
Error validating date '2011-10-1'
---- test date 2111-10-31 - expected false
---- Exception calling validDate: null
---- test date 2001-10-31 - expected true
---- Exception calling validDate: null
Error validating date '2001-10-31'
Error validating date '2001-10-31'
---- test date 2111-10-33 - expected false
---- Exception calling validDate: null
---- test date 2111-11-30 - expected false
---- Exception calling validDate: null
---- test date 2013-11-30 - expected true
---- Exception calling validDate: null
Error validating date '2013-11-30'
Error validating date '2013-11-30'
---- test date 2111-11-31 - expected false
---- Exception calling validDate: null
---- test date 2011-12-31 - expected true
---- Exception calling validDate: null
Error validating date '2011-12-31'
Error validating date '2011-12-31'
---- test date 2099-12-31 - expected true
---- Exception calling validDate: null
Error validating date '2099-12-31'
Error validating date '2099-12-31'
最佳答案
如果 m_datePattern
是一个 Pattern
,则您使用的compile
不正确。编译的签名是
public static Pattern compile(String regex)
因为它是static
,所以它不适用于实例;它通常被称为 like
Pattern.compile(regex)
使用 Pattern
对象而不是类名没有区别。因此,如果 p
是一个 Pattern
对象,那么:
p.compile(regex)
与 Pattern.compile(regex)
完全相同,即使 p
为 null
。该对象被忽略。
最后,编译
返回一个Pattern
,这意味着结果必须分配给一个Pattern
对象:
pat = Pattern.compile(Regex);
您的代码不会在任何地方分配它。因此,生成的模式就被丢弃了。
最后,当您使用 group(n)
时,从 1 开始的组是捕获组,第一个 (
,第二个 (
等,在正则表达式中。您的正则表达式是
"^((19|20)\\d\\d)-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])$"
在这个正则表达式中,group(1)
是年份; group(2)
为 19 或 20; group(3)
是月,group(4)
是日。您的代码在月份和日期使用了错误的组。要么更改数字,要么像这样将 (19|20)
指定为 non-capture 组:
"^((?:19|20)\\d\\d)-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])$"
现在它不会被算作捕获组之一。
您的代码中可能还有其他错误。这些只是我注意到的。
关于Java RegEx 日期验证 - 闰年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41916137/
在 JSF2 应用程序中遇到验证属性的问题时,有两种主要方法。 使用 Annotation 在 ManagedBean 上定义验证 @ManagedBean public class MyBean {
我想实现一个不常见的功能,我认为 jquery 验证插件将是最好的方法(如果您在没有插件的情况下建议和回答,我们也会欢迎)。我想在用户在输入字段中输入正确的单词后立即隐藏表单。我试过这个: $("
我有几个下拉菜单(类名为month_dropdown),并且下拉菜单的数量不是恒定的。我怎样才能为它们实现 NotEqual 验证。我正在使用 jQuery 验证插件。 这就是我写的 - jQuery
我设法制作了这个网址验证代码并且它起作用了。但我面临着一个问题。我认为 stackoverflow 是获得解决方案的最佳场所。 function url_followers(){ var url=do
我目前正在使用后端服务,该服务允许用户在客户端应用程序上使用 Google Games 库登录。 用户可以通过他们的 gplay ID 向我们发送信息,以便登录或恢复旧帐户。用户向我们发送以下内容,包
我正在尝试验证输入以查看它是否是有效的 IP 地址(可能是部分地址)。 可接受的输入:172、172.112、172.112.113、172.112.113.114 Not Acceptable 输入
我从 Mongoose 验证中得到这条消息: 'Validator failed for path phone with value ``' 这不应该发生,因为不需要电话。 这是我的模型架构: var
我一直在尝试使用Python-LDAP (版本 2.4.19)在 MacOS X 10.9.5 和 Python 2.7.9 下 我想在调用 .start_tls_s() 后验证与给定 LDAP 服务
我正在处理一个仅与 IE6 兼容的旧 javascript 项目(抱歉...),我想仅在 VS 2017 中禁用此项目的 ESLint/CSLint/Javascript 验证/CSS 验证。 我知道
我正在寻找一种方法来验证 Spring 命令 bean 中的 java.lang.Double 字段的最大值和最小值(一个值必须位于给定的值范围之间),例如, public final class W
我正在尝试在 springfuse(JavaEE 6 + Spring Framework (针对 Jetty、Tomcat、JBoss 等)) 和 maven 的帮助下构建我的 webapps 工作
我试图在我们的项目中使用 scalaz 验证,但遇到了以下情况: def rate(username: String, params: Map[String, String]): Validation
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
我有一个表单,人们可以单击并向表单添加字段,并且我需要让它在单击时验证这些字段中的值。 假设我单击它两次并获取 2 个独立的字段集,我需要旋转 % 以确保它在保存时等于 100。 我已放入此函数以使其
在我的页面中有一个选项可以创建新的日期字段输入框。用户可以根据需要创建尽可能多的“截止日期”和“起始日期”框。就像, 日期_to1 || date_from1 日期到2 ||日期_from2 date
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
有没有办法在动态字段上使用 jquery 验证表单。 我想将其设置为必填字段 我正在使用 Jsp 动态创建表单字段。 喜欢 等等...... 我想使用必需的表单字段验证此表单字段。 最佳答
嗨,任何人都可以通过提供 JavaScript 代码来帮助我验证用户名文本框不应包含数字,它只能包含一个字符。 最佳答案 使用正则表达式: (\d)+ 如果找到匹配项,则字符串中就有一个数字。 关于J
我有两个输入字段holidayDate和Description(id=tags) $(document).ready(function() {
我遇到了这个问题,这些验证从电子邮件验证部分开始就停止工作。 我只是不明白为什么即使经过几天的观察,只是想知道是否有人可以在这里指出我的错误? Javascript部分: function valid
我是一名优秀的程序员,十分优秀!