我有一个文本区,我想只允许a-z 0-9 s,-和r n
我使用JQuery第三方插件。这是我的验证规则:
jQuery("#description").validate({
expression: "if (VAL.match(/^[a-z0-9 ,.-]*$/gi)) return true; else return false;",
message: "Only: a-z 0-9 period comma dash space"
});
对于a-z 0-9都可以。-
然而,当我在这些sq中加上r时。括号允许输入验证,这不会弹出消息,但是用户可以输入任何他们想要的字符,它会进行验证。如果需要,消息显示焦点何时离开文本区。
我还为多行添加了'm'标志,而没有添加r,这给了我相同的效果。
这个问题已经困扰我一个星期了,我才刚刚开始学习regexp。有没有人有一个想法,我应该寻找哪个方向,以解决这个问题,请?
var string = "This is antest";
string.match(/^[a-zs]$/i); // ["This is antest" ]
string.match(/^[a-z rn]+$/i); // ["This is antest" ]
显然你甚至不需要m
。也许你需要对转义字符进行双重转义?看起来那里可能正在进行一些处理。所以:
string.match(/^[a-z \r\n]+$/i);
请记住,s
包含空格、换行符、回车符和制表符(t
)
我认为你的问题是围绕"-"字符。在字符集("[xyx]")中,破折号是为数不多的特殊字符之一。当它出现在两个字符之间时,它设置一个范围。当它的一侧只有一个字符时,它被简单地当作一个破折号字符处理。
在第一个正则表达式中,您以破折号结束(/^[a-z0-9 ,.-]*$/gi
),因此它将其视为破折号字符。
在第二个(/^[a-z0-9 ,.-r]*$/gi
)中,您以r结束,创建.-r
您应该能够通过将破折号移动到集合的末尾(或开始)或转义来解决这个问题:
/^[a-z0-9 ,.r-]*$/gi
…或…
/^[a-z0-9 ,.-r]*$/gi