【问题标题】:Remake of this regexp重制这个正则表达式
【发布时间】:2010-11-10 03:07:35
【问题描述】:

我有这个正则表达式来帮助我验证表单输入。

var nrExp = /^\d{6}\-\d{4}$/;

这仅允许 10 位数字,其中最后 4 位数字用“减号”分隔。

    012345-6789

我需要让它也允许它不带减号并且用空格代替减号:

   0123456789
   012345 6789

如何重新制作这个正则表达式以允许我想要的内容?

谢谢

【问题讨论】:

    标签: javascript jquery html validation forms


    【解决方案1】:
    /^\d{6}[- ]?\d{4}$/
    

    您不需要转义括号内的减号,因为它没有给出范围。

    【讨论】:

      【解决方案2】:
      /^\d{6}[ \-]?\d{4}$/
      

      【讨论】:

        【解决方案3】:

        var nrExp = /^\d{6}\[\- ]?\d{4}$/;

        应该这样做 - 空格或破折号,由 ? 设置为可选的?

        【讨论】:

          【解决方案4】:
          var re = /^\d{6}[\- ]?\d{4}$/
          console.log(re.test('012345-6789'));
          console.log(re.test('012345 6789'));
          console.log(re.test('0123456789'));
          

          【讨论】:

            【解决方案5】:

            当然。您只想将减号与其他几个字符一起设为可选。

            试试这个:

            var nrExp = /^\d{6}(\-| )?\d{4}$/;
            

            注意(\-| ) 后面的?。这允许匹配部分是可选的。

            【讨论】:

            • 应该可以,但是有点丑。 (1) - 根本不需要在 [] 块之外转义。 (2) 如果您匹配两个可能的字符之一,而不是字符串,[- ](\-| ) 更适合(并且不会创建捕获组,与您的示例不同)。
            • @cHao 感谢您的建议。不过考虑一下,他将来可能想添加其他角色。我知道它也适用于字符类,我只是习惯于对所有内容使用多字符分隔符,无论如何我倾向于使用()
            猜你喜欢
            • 2011-02-05
            • 2020-04-26
            • 1970-01-01
            • 2012-06-09
            • 1970-01-01
            • 2011-02-20
            • 2015-11-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多