验证数据合法性,数据需要符合以下规则:
- 逗号分隔
- 只有一个数字(一位),其余的都是短横杠
-
示例:
-,-,9,-,-
9,-,-,-,-
-,-,-,-,9
用正则怎么匹配啊?需要用到正则中的哪些概念?全都看有点晕
解决
这个是我在stackoverflow上的提问:
How can I match this string '-,-,-,9,-'?
确实比较麻烦,如果单从正则角度来匹配有些不太适合
从其他角度解决应该会好一些~
谢谢大家~
我觉得以逗号split之后,遍历结果检查会更好一点。
我写的这个,你上面举例的都能测试通过的。
/(?:[\-\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
分开做? 先匹配 \d
, 再匹配 -
思路:
1. 先将数字转换为 -
2. 匹配字符串 -,
javascript
var str = '-,-,9,-,-'; // var str = '9,-,-,-,-,-'; // var str = '-,-,-,-,-,9'; // var str = '-,-,-,1,-,9'; /^(-,)*-$/.test(str.replace(/\d/, '-'));
([0-9],-,-,-,-)|(-,[0-9],-,-,-)|(-,-,[0-9],-,-)|(-,-,-,[0-9],-)|(-,-,-,-,[0-9])