正则表达式怎么匹配`-,-,9,-,-`?

验证数据合法性,数据需要符合以下规则:

  1. 逗号分隔
  2. 只有一个数字(一位),其余的都是短横杠-

示例:

-,-,9,-,-
9,-,-,-,-
-,-,-,-,9

用正则怎么匹配啊?需要用到正则中的哪些概念?全都看有点晕

解决

这个是我在stackoverflow上的提问:

How can I match this string '-,-,-,9,-'?

确实比较麻烦,如果单从正则角度来匹配有些不太适合

从其他角度解决应该会好一些~

谢谢大家~

阅读 1.6k
评论
    5 个回答

    我写的这个,你上面举例的都能测试通过的。

    /(?:[\-\d],)+[\-\d]/
    

    更简洁的:

    /([\-\d],)+[\-\d]/
    

    UPDATE:
    要求是只能是一位数字:
    所以这个或许会好一点:

    /^(\-,)*\d(,\-)*$/
    

    给出的测试案例:

    /^(\-,)*\d(,\-)*$/.test("-,-,-,-,9"); //true
    /^(\-,)*\d(,\-)*$/.test("9,-,-,-,-"); //true
    /^(\-,)*\d(,\-)*$/.test("-,-,9,-,-"); //true
    
    /^(\-,)*\d(,\-)*$/.test("-,-,9,-,-,9"); //false
    /^(\-,)*\d(,\-)*$/.test("-,-,9,9,-,-"); //false
    /^(\-,)*\d(,\-)*$/.test("99,-,-,-,-");  //false
    /^(\-,)*\d(,\-)*$/.test("9,9,-,-,-");   //false
    
      • 782

      思路:
      1. 先将数字转换为 -
      2. 匹配字符串 -,

      javascriptvar str = '-,-,9,-,-';
      // var str = '9,-,-,-,-,-';
      // var str = '-,-,-,-,-,9';
      // var str = '-,-,-,1,-,9';
      
      /^(-,)*-$/.test(str.replace(/\d/, '-'));
      
        • 1.8k

        分开做? 先匹配 \d, 再匹配 -

          我觉得以逗号split之后,遍历结果检查会更好一点。

            • 9.7k

            ([0-9],-,-,-,-)|(-,[0-9],-,-,-)|(-,-,[0-9],-,-)|(-,-,-,[0-9],-)|(-,-,-,-,[0-9])

              撰写回答

              登录后参与交流、获取后续更新提醒

              相似问题
              推荐文章