我想编写可以接受以下几点的正则表达式,
1 - 格式应为x-y-z
2-x,y和z应为数字。
3- x可以是任何数字。
从20开始不能超过4-y。
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?
答案 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;