提问者:小点点

RegEx-允许仅带有特殊字符逗号的alpha、数字-但不允许前置或后继逗号


我需要帮助形成一个正则表达式,允许阿尔法,数字和只有特殊字符逗号-但逗号不应该出现在开始或结束或没有中间空白逗号…现在我正在使用下面的正则表达式,它适用于aplha-数字逗号,但它将允许逗号在开始或结束或空白逗号。

/^[a-zA-Z0-9,] * $/ --

因此,需要regex中的帮助来满足上述中间没有前置/后继/空白逗号的要求…

正确案例:abc, abc12,asdf,qwer23错误案例:,abc,abc12,asdf,qwer23错误案例:abc,abc12,asdf,qwer23,错误案例:abc,abc12,,asdf,qwer23

在修复这个问题的最后2小时被击中,任何帮助都非常感谢…


共1个答案

匿名用户

我建议将逗号从char类中分离出来,并使用*量化组将整个表达式包装为一个可选的非捕获组,围绕一个强制性子模式(至少需要1个char)(因为您的正则表达式也允许空字符串):

^(?:[a-zA-Z0-9]+(?:,[a-zA-Z0-9]+)*)?$

查看正则表达式演示

详情:

  • ^-字符串的开头
  • (?:[a-zA-Z0-9] (?:,[a-zA-Z0-9] )*)? -(=整个字符串可能为空)的可选序列:
    • [a-zA-Z0-9]-1个或多个字母数字
    • (?:,[a-zA-Z0-9])*-零个或多个(由于*)序列:
      • -逗号
      • [a-zA-Z0-9]-1个或多个字母数字

      JS演示:

      var test = [
          "abc,abc12,asdf,qwer23", // correct 
          ",abc,abc12,asdf,qwer23", // incorrect
          "abc,abc12,asdf,qwer23,", // incorrect
          "abc,abc12,,asdf,qwer23" ]; // incorrect
      var rx = /^(?:[a-zA-Z0-9]+(?:,[a-zA-Z0-9]+)*)?$/;
      for (var s of test) {
        console.log(s + " => " + rx.test(s));
      }