如何拒绝包含日期格式的非连续字符的字符串
How can I reject a string containing non-consecutive characters in a date format
我正在尝试提出一个正则表达式,它将拒绝提供的日期格式中的非连续字符。我想尽可能灵活,所以我决定我的日期格式字符串可以包含 YY 或 YYYY、MM 或 MMM、DD 或 DDD、hh mm 和 ss。
我已经计算出的一些正则表达式 - 例如,匹配以下内容将显示月份是 3 个字符的格式:
([M]){2}
对于检查日期格式是否不包含非连续字符,我一无所知。例如,以下日期格式应该是有效的:
YYYY-MM-DD hh:mm:ss
hh:mm:ss YYYY-MM-DD
DD/MMM/YYYYhh-mm
但这些格式应该被拒绝
YYYY-MM-DD hh:mm:ss YYYY // year appears twice
hh:mm:ss YYYY-MM-DD hh // hour appears twice
DD/MMM/YYYYhh-mm m // m not consecutive with other m
为了以后的扩展,我想允许非连续的特殊字符(/ - . : )等,拒绝所有非连续的字母数字字符。尽管区分大小写 - mm 和 MM 不一样(如上)
需要说明的是 - 我不是在尝试验证实际日期 - 我只是在尝试验证日期格式字符串。
我建议检查是否至少有一次出现了之前已经存在的相同字符,然后否定结果:
function(text) {
return !/(\w)*(?!).*/.test(text);
}
见regex demo。您可以将 \w
更改为 [YMDhms]
以仅检查这六个字母。
图案详情
(\w)
- 第 1 组(通过 </code> 反向引用进一步引用):单词 char</li>
<li><code>*
- 与组 1 中相同的字符出现零次或多次
(?!)
- 设置边界,确保下一个字符与第 1 组中的字符不同
.*
- 除换行字符外的任何零个或多个字符,尽可能多
- 与第 1 组相同的字符。
我正在尝试提出一个正则表达式,它将拒绝提供的日期格式中的非连续字符。我想尽可能灵活,所以我决定我的日期格式字符串可以包含 YY 或 YYYY、MM 或 MMM、DD 或 DDD、hh mm 和 ss。
我已经计算出的一些正则表达式 - 例如,匹配以下内容将显示月份是 3 个字符的格式:
([M]){2}
对于检查日期格式是否不包含非连续字符,我一无所知。例如,以下日期格式应该是有效的:
YYYY-MM-DD hh:mm:ss
hh:mm:ss YYYY-MM-DD
DD/MMM/YYYYhh-mm
但这些格式应该被拒绝
YYYY-MM-DD hh:mm:ss YYYY // year appears twice
hh:mm:ss YYYY-MM-DD hh // hour appears twice
DD/MMM/YYYYhh-mm m // m not consecutive with other m
为了以后的扩展,我想允许非连续的特殊字符(/ - . : )等,拒绝所有非连续的字母数字字符。尽管区分大小写 - mm 和 MM 不一样(如上)
需要说明的是 - 我不是在尝试验证实际日期 - 我只是在尝试验证日期格式字符串。
我建议检查是否至少有一次出现了之前已经存在的相同字符,然后否定结果:
function(text) {
return !/(\w)*(?!).*/.test(text);
}
见regex demo。您可以将 \w
更改为 [YMDhms]
以仅检查这六个字母。
图案详情
(\w)
- 第 1 组(通过</code> 反向引用进一步引用):单词 char</li> <li><code>*
- 与组 1 中相同的字符出现零次或多次
(?!)
- 设置边界,确保下一个字符与第 1 组中的字符不同.*
- 除换行字符外的任何零个或多个字符,尽可能多- 与第 1 组相同的字符。