jQuery、匹配和正则表达式

Res*_*ent 3 regex testing jquery

所以我在 jQuery 中有以下代码,我试图基本上匹配 MM/YYYY 格式的日期,其中 MM 是 1 到 12 之间的值,YYYY 是 1900 年代或 2000 年代的日期。我之前并没有真正使用过jQuery的测试功能。有人可以告诉我我的代码或正则表达式有什么问题吗?

        var fieldValue = $(this).val();
        if(!fieldValue.test(([1-9]|1[0-2])/^(19|20)\d\d)){
            Errors = Errors + 1;
            $(this).addClass("form_error");             
        }
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 5

您的代码有几个问题:

  • 你需要使用RegExp#test(String),而不是String#test(RegExp)
  • 该模式应出现在正则表达式分隔符之间/.../
  • 必须/在正则表达式文字内转义
  • 如果验证整个字符串,请在模式的^开头添加并在结尾添加锚点$

使用

if(!/^(0?[1-9]|1[0-2])\/((?:19|20)\d\d)$/.test(fieldValue)) {
Run Code Online (Sandbox Code Playgroud)

否则,您可以使用String#match并检查匹配是否成功

if(fieldValue.match(/^(0?[1-9]|1[0-2])\/((?:19|20)\d\d)$/)) {
Run Code Online (Sandbox Code Playgroud)

0?允许可选的前导0.

细节

  • ^- 字符串的开头
  • (0?[1-9]|1[0-2])- 第 1 组:月份,从0112
  • \/ - A/
  • ((?:19|20)\d\d)- 第 2 组:或者1920然后 2 位数字
  • $- 字符串末尾。