【问题标题】:Regex to disallow certain characters in specific sequence正则表达式禁止特定序列中的某些字符
【发布时间】:2019-08-06 06:03:47
【问题描述】:

我有一个只允许使用字母、数字、空格或连字符的正则表达式。但是,我想禁止用户执行以下操作:

hello--world Have more than one hyphen sitting next to each other
--hello Have a hyphen in the beginning. It must have a number or letter first

我该如何做到这一点?我当前的正则表达式如下所示:

let alphanumericTest = new RegExp("^\s*([0-9a-zA-Z- ]*)\s*$");

【问题讨论】:

    标签: javascript jquery regex


    【解决方案1】:

    你可以试试这个正则表达式。 ^\s*[0-9a-zA-Z](?:(?!--)[0-9a-zA-Z- ])*$

    This is a demo.

    【讨论】:

      【解决方案2】:

      您可以提高匹配效率,而无需使用负前瞻来匹配非连续连字符,使用重复组可以选择在第一个单词后以连字符开头。

      ^[ ]*[0-9a-zA-Z]+(?:-[0-9a-zA-Z]+)*-?(?:[ ]+-?(?:[0-9a-zA-Z]+-?)*)*$
      

      (为清楚起见,使用[ ] 匹配空格)

      说明

      • ^ 字符串开始
      • [ ]* 匹配 0+ 个空格
      • [0-9a-zA-Z]+ 匹配 1 次以上列出的任何一项
      • (?:-[0-9a-zA-Z]+)* 重复 0+ 次匹配连字符和 1+ 列出的内容
      • -? 匹配可选连字符
      • (?:非捕获组
        • [ ]+-?(?:[0-9a-zA-Z]+-?)* 匹配 1+ 个空格,可选连字符,重复 0+ 次列出的内容和可选连字符
      • )*关闭外部非捕获组并重复0+次
      • $字符串结束

      Regex demo

      【讨论】:

        【解决方案3】:

        试试:

        let alphanumericTest = new RegExp("^(?!-)(?!.*--)[0-9a-zA-Z- ]+(?<!-)$");

        这会检查第一个字符不是-,并且字符串中的任何位置都没有连续的--s

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-24
          • 2017-11-24
          • 1970-01-01
          • 1970-01-01
          • 2011-08-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多