- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道那里有很多正则表达式线程,但我找不到任何地方。
我有一个适用于 DD/MM/YYYY 格式的正则表达式。在这里:
^((0?[13578]|1[02])[\/.]31[\/.][1-9][0-9]{3})|(([01,1]|0[3-9]|1[1-2])[\/.](29|30)[\/.][1-9][0-9]{3})|((0?[1-9]|1[0-2])[\/.](0?[1-9]|1[0-9]|2[0-8])[\/.][1-9][0-9]{3})|([02,2][\/.]29[\/.](([1-9][0-9](04|08|[2468][048]|[13579][26]))|([2468][0]{3})))$
示例:29/2/2014、31/4/2014...
但是当我尝试使用 YYYY/MM/DD 格式进行验证时,我发现了这个:
^(((19|20)([2468][048]|[13579][26]|0[48])|2000)[\/.]02[\/.]29|((19|20)[0-9]{2}[\/.](0?[469]|11)[\/.](0?[1-9]|[12][0-9]|30)|(19|20)[0-9]{2}[\/.](0?[13578]|1[02])[\/.](0?[1-9]|[12][0-9]|3[01])|(19|20)[0-9]{2}[\/.]02[\/.](0?[1-9]|1[0-9]|2[0-8])))$
此模式仅适用于 YYYY 从:19xx -> 20xxx。
当我更改它时,我希望它可以很好地与 YYYY 从:1xxx ->9xxx 一起使用。但效果并不好。
我是正则表达式的新手,很难逃脱它。
非常感谢,抱歉我的英语不好。
最佳答案
编辑:我决定在午餐时花几分钟时间清理它并添加“正确”的方法(没有正则表达式)以及一个 jsFiddle。
为了可读性、可维护性和健全性,正确的做法是避免在此处使用正则表达式。编写正则表达式来执行此操作非常困难,而且结果也非常难以阅读。
相反,只需将日期解析为其组成部分,然后像这样验证它们:
/**
* Check whether a given year is a leap year
* @param integer y The integer
* @return boolean True for yes, false for no
*/
function isLeapYear(y) {
return (0 == y % 4 && (0 == y % 400 || 0 != y % 100));
}
/**
* Validate a date in YYYY/MM/DD format (allows YYYY/M/D and periods instead of slashes) without regex.
* @param string str The date to test.
* @return boolean True for valid, false for invalid.
*/
function validateDateWithoutRegex(str) {
// check the format first
if(!/^\d{4}[\/.]\d{1,2}[\/.]\d{1,2}$/.test(str)) {
return false;
}
var parts = str.split(/\D/) // split on non-digits
.map(function(val) { return parseInt(val); }); // convert strings to ints
if(parts[0] < 1000 || parts[0] > 2999) { // invalid year
return false;
}
if(parts[1] > 12 || parts[1] === 0) { // invalid month
return false;
}
if(parts[2] > 31 || parts[2] === 0) { // invalid day
return false;
}
switch(parts[1]) {
case 4:
case 6:
case 9:
case 11:
if(parts[2] > 30) { // invalid day
return false;
}
break;
case 2: // February...
return (parts[2] < 29 || parts[2] == 29 && isLeapYear(parts[0]));
break;
}
return true;
}
// Usage: validateDateWithoutRegex('2014/07/28'); // returns true
但是,只是因为今晚我想做一些正则表达式......你可以使用这个怪物:
/^(?=(?!\d+\D0?2\D29)|(?:\d{2}(?:04|08|[13579][26]|[2468][048])|1[26]00|2000)\D0?2\D29$)([12]\d{3})[\/.]((?:0?[13578]|10|12)[\/.](?:0?[1-9]|[12]\d|3[0-1])|(?:0?[469]|11)[\/.](?:0?[1-9]|[12]\d|30)|0?2[\/.](?:0?[1-9]|1\d|2[0-9]))$/
这甚至可以验证闰年。
Here's an interactive jsFiddle that also runs 50+ unit tests验证此方法与非正则表达式方法的工作方式相同。
可能有用的解释,由 Debuggex 提供:
匹配示例:
不匹配示例:
已经很晚了,我们将不胜感激。
公历与新教改革等历史密切相关。它在创建时引起了极大的争议,并没有被普遍采用。采用它的地方在不同时间以不同方式采用它。结果:哪些日期在公历中有效取决于您所在的位置。 See, e.g., Wikipedia .
从本质上讲,公历于 1582 年问世。从那时起,其采用因国家/地区而异。例如,日历基本上定义为 1582 年的 10 月 5 日至 14 日不存在。许多国家同样跳过日期以移动旧的(Julian)日历日期以匹配公历,但他们并没有全部跳过相同的日子(甚至天数相同);他们跳过哪几天取决于国家/地区以及采用日历的时间。
因此,如果您希望能够验证 1582 年之前(在某些地方甚至是 1923 年)之前的日期,请牢记所有这些。玩得开心!
关于javascript - 尝试验证 YYYY/MM/dd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24989065/
在 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
我是一名优秀的程序员,十分优秀!