【问题标题】:RegEx Pattern to Match Only Certain Characters正则表达式模式仅匹配某些字符
【发布时间】:2009-10-12 17:17:14
【问题描述】:

我是 RegEx 的新手,这个特殊的问题让我很困惑。这是用于 JavaScript 函数的。

我需要验证输入以使其仅符合以下条件:

  • 字母 A-Z(大写和小写)
  • 数字 0-9
  • 以下附加字符:空格、句点 (.)、逗号 (,)、加号 (+) 和破折号 (-)

对于前两个标准,我可以很容易地编写一个模式,但第三个更难。这是我管理的最后一个模式,但它似乎不适用于测试字符串Farh%%$$+++,

这是我正在尝试的模式

[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\\+\\.\\,\\s]*$ 

它的失败在于它在提交表单时允许输入文本字段中指定的字符以外的字符。

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    我刚刚对此进行了测试,至少在我的第一轮测试中它似乎有效。

    ^[a-zA-Z 0-9\.\,\+\-]*$
    

    【讨论】:

    • 除了它匹配一个空字符串(和制表符)并且您不需要转义任何这些字符
    • @SlientGhost 空字符串好点,但从技术上讲,任何允许空格的东西,并且使用单个字符类将允许所有空格。至于转义,我只是很小心,我通过 .NET RegEx 测试器运行它并看到了有趣的结果。
    • 我认为这可能会做到。必须添加 0-9 才能匹配数字。
    • 你看,它不仅仅是制表符,在 Javascript 中 \s 匹配空格、制表符、换行符加上 any Unicode 空白字符,在我看来,这有点超过 OP 想要的。
    • 啊,是的,忘记了 0-9,并删除了 \s
    【解决方案2】:

    破折号必须放在第一位,以免被解释为范围分隔符。另外,请确保您在正则表达式的开头和结尾分别使用 ^ 和 $ 锚定,这样您的整个测试字符串就会被您的正则表达式吞没。

    /^[-+., A-Za-z0-9]+$/

    【讨论】:

    • 破折号也可以出现在末尾或字符范围之间,以免被解释为范围分隔符:[a-z0-9-][a-z-0-9] 也是有效的表达式。
    【解决方案3】:
    /^[a-z0-9 .,+-]+$/i
    

    【讨论】:

      【解决方案4】:

      仅用于将选择器验证为 ID(根据允许的字符 https://www.w3.org/TR/html4/types.html#type-id):

      var isValidIdSelector = function (str) {
          var regex = new RegExp(/^[A-Za-z][A-Za-z0-9_\-\:\.]*$/gm);
          return regex.test(str);
      };
      

      【讨论】:

        【解决方案5】:
        ng-pattern="/^[a-zA-Z0-9/&quot&quot\\\]\[:;|=,+*?<>]+$/"
        

        允许:字母数字 + " / \ [ ] : ; | = , + * ?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-06
          • 2016-05-19
          • 2010-12-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多