如何拒绝日期格式的包含非连续字符的字符串

我正在尝试提出一个正则表达式,该正则表达式将拒绝提供的日期格式的非连续字符。我想尽可能地灵活,因此我决定我的日期格式字符串可以包含YY或YYYY,MM或MMM,DD或DDD,hh mm和ss。

我已经计算出的一些正则表达式-例如,匹配以下内容将显示月份是3个字符的格式:

([M])\1{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

为了将来的扩展,我希望允许使用非连续的特殊字符(/-。:)等,并拒绝所有非连续的字母数字字符。虽然区分大小写-毫米和毫米不同(如上所述)

请明确说明-我不是要验证实际日期-我只是想验证日期格式字符串。

vancehgame 回答:如何拒绝日期格式的包含非连续字符的字符串

我建议检查是否至少有一次相同字符的出现,然后否定结果:

function(text) { 
    return !/(\w)\1*(?!\1).*\1/.test(text);
}

请参见regex demo。您可以将\w更改为[YMDhms]以仅检查这六个字母。

模式详细信息

  • (\w)-第1组(进一步使用\1后向引用进行引用):单词char
  • \1*-与第1组相同的字符出现零次或多次
  • (?!\1)-设置边界,确保下一个字符与组1中的字符不同
  • .*-尽可能多的零个或多个除换行符以外的字符
  • \1-与第1组相同的字符。
本文链接:https://www.f2er.com/2718411.html

大家都在问