什么是不接受0-0-0的正则表达?

时间:2016-05-16 12:24:59

标签: javascript regex

我想编写可以接受以下几点的正则表达式,

1 - 格式应为x-y-z

2-x,y和z应为数字。

3- x可以是任何数字。

从20开始不能超过4-y。

  1. z不能超过272。
  2. 6-x,y,z不能同时为0。

    我写了一个符合前5分的正则表达式。正则表达式是

    ^([0-9]+)-([0-9]|1[0-9])-([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-6][0-9]|27[0-2])$ 
    

    但它也接受0-0-0不应被接受。有没有办法避免0-0-0?

1 个答案:

答案 0 :(得分:4)

您可以在(?!0+-0+-0+$)之后的开头添加^否定前瞻来锚定它:

^(?!0+-0+-0+$)([0-9]+)-([0-9]|1[0-9])-([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-6][0-9]‌​|27[0-2])$

请参阅regex demo

如果整个字符串只包含(?!0+-0+-0+$)0,则-将无法匹配。



var re = /^(?!0+-0+-0+$)([0-9]+)-([0-9]|1[0-9])-([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-6][0-9]‌​|27[0-2])$/; 
var strs = ['1-19-44', '0-0-0', '0-0-6'];
for (var s of strs) {
  document.body.innerHTML += s + ": <b>" + re.test(s) + "</b><br/>";
}
&#13;
&#13;
&#13;