正则表达式的格式为 mm / dd / yyyy。
我的current regex目前有一个小问题,我无法指出。我可以用有效月份,闰年和年份范围验证mm / dd / yyyy。虽然写的年份是'2016asdf',但它仍接受该值。
应遵循的规则是:
有效值:
2016年12月31日
1900年1月15日
02/29/2016(自2016年起是闰年)
无效值:
1/01/1900(因格式为'mm'而不是'm')
01/32/1900(因为没有这样的日期)
19/22/1900(因为没有这样的月份)
03/01/2100(超过年限)
02/29/2017(2017年以来不是闰年)
答案 0 :(得分:4)
你弄错了。这不应该通过正则表达式完成,事实上,它并不意味着这样做。为此,您需要执行以下步骤:
1-通过Regex检查模式
2-验证日期。
您正在寻找的模式是:
// $result_i = mysqli_query( $conn, $sql_i ); // remove this line
// query executed first time, record added, NO more queries here
if ( mysqli_query( $conn, $sql_i ) ) {
redirect_to( "profile_image_fetch_image.php?id=$S_id" );
} else {
echo "Error: " . $sql_i . "<br>" . mysqli_error( $conn );
}
看一下这个模式:http://regexr.com/3fe3s
最后,如果你想检查日期是否是有效日期(在检查模式后)。
以下是整个方法:
var pattern = /(0\d{1}|1[0-2])\/([0-2]\d{1}|3[0-1])\/(19|20)\d{2}/
答案 1 :(得分:0)
每个|都需要^和$所以正则表达式应该是:
^((0 [13578] | 1 [02])31 / [0-9] {2} [/]。)$ | ^((01 | 0 [3-9] | 1 [1- 2])/./ [0-9] {2})$ |。^((0 [1-9] | 1 [0-2])/./ [0-9] {2})$。| ^((02)[/] 29 /.)$
答案 2 :(得分:0)
有一个非常彻底的答案here。您可以阅读使用该方法的解释和注意事项。
31个月
(0[13578]|1[02])[\/.](0[1-9]|[12][0-9]|3[01])[\/.](18|19|20)[0-9]{2}
30天的月份
(0[469]|11)[\/.](0[1-9]|[12][0-9]|30)[\/.](18|19|20)[0-9]{2}
2月1 - 8日始终有效
(02)[\/.](0[1-9]|1[0-9]|2[0-8])[\/.](18|19|20)[0-9]{2}
2月29日在闰年也有效
(02)[\/.]29[\/.](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000)
这意味着如果你把它们放在一起就是这个:
((0[13578]|1[02])[\/.](0[1-9]|[12][0-9]|3[01])[\/.](18|19|20)[0-9]{2})|((0[469]|11)[\/.](0[1-9]|[12][0-9]|30)[\/.](18|19|20)[0-9]{2})|((02)[\/.](0[1-9]|1[0-9]|2[0-8])[\/.](18|19|20)[0-9]{2})|((02)[\/.]29[\/.](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000))
这个版本有点短,但有点难以理解。
((0[13578]|1[02])[\/.]31[\/.](18|19|20)[0-9]{2})|((01|0[3-9]|1[1-2])[\/.](29|30)[\/.](18|19|20)[0-9]{2})|((0[1-9]|1[0-2])[\/.](0[1-9]|1[0-9]|2[0-8])[\/.](18|19|20)[0-9]{2})|((02)[\/.]29[\/.](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000))
这些脚本很长且不可维护。应该很清楚 这不是一个好主意,但它是可能的。
注意事项:
- 范围1800-2099(可以添加更多,但不需要太多困难,但需要在4-6个不同的地方进行更改)
- 需要2个数字的月份和日期(严格性可以从~8个地方的表达中删除)
- [/。]作为分隔符(8个地方)
- Hasn未经过测试(我们可以针对所有数字组合进行检查,并与avascript日期函数进行比较?[证明我们正在重新发明轮子])
答案 3 :(得分:0)
const regex = /^02\/(?:[01]\d|2\d)\/(?:19|20)(?:0[048]|[13579][26]|[2468][048])|(?:0[13578]|10|12)\/(?:[0-2]\d|3[01])\/(?:19|20)\d{2}|(?:0[469]|11)\/(?:[0-2]\d|30)\/(?:19|20)\d{2}|02\/(?:[0-1]\d|2[0-8])\/(?:19|20)\d{2}$/
const testData = [
'02/02/1904',
'02/12/2008',
'02/29/2012',
'02/29/2013',
'06/31/2013',
'01/31/2013',
'02/02/1916',
'02/02/2020',
'02/02/2024',
'02/02/2036',
'02/02/1952',
'02/02/2056',
'01/01/2256',
'02/29/2000',
'02/29/2100',
'02/29/1900',
'02/29/1200',
'02/29/2400'
]
for (let date of testData) {
console.log(`${date} ${regex.test(date)}`)
}
答案 4 :(得分:0)
它验证这些格式:
<块引用>/(((19\d{2}|20[0-9]{2}))(\/|\.|\-)(0?[1-9]|1[0-9]|2[0-9]|3[0-1])(\/|\.|\-))(0[0-9]$|1[0-2]$|[0-9]$)/gm