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

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

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

示例:

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

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

解决

这个是我在stackoverflow上的提问:

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

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

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

谢谢大家~

阅读 4k
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

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

javascriptvar str = '-,-,9,-,-';
// var str = '9,-,-,-,-,-';
// var str = '-,-,-,-,-,9';
// var str = '-,-,-,1,-,9';

/^(-,)*-$/.test(str.replace(/\d/, '-'));

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进