我有一个textarea,我想只允许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.brackets中添加\ r时,它允许输入验证哪些不会抛出消息,但是用户可以输入他们想要的任何字符并进行验证。如果需要,消息显示焦点离开textarea时。
我还添加了' m'多行的标志并没有添加\ r \ n给了我同样的效果。
一直在摸不着头脑,已经开始学习regexp了。有没有人知道我应该向哪个方向寻求解决这个问题?
答案 0 :(得分:3)
var string = "This is a\ntest";
string.match(/^[a-z\s]$/i); // ["This is a\ntest" ]
string.match(/^[a-z \r\n]+$/i); // ["This is a\ntest" ]
你甚至不需要m
。也许你需要双重逃脱你的逃脱角色?看起来可能会有一些处理。所以:
string.match(/^[a-z \\r\\n]+$/i);
请注意,\s
包含空格,换行符,回车符和制表符(\t
)
答案 1 :(得分:1)
我认为你的问题围绕着“ - ”字符。在字符集(“[xyx]”)中,短划线是少数特殊字符之一。当它出现在两个字符之间时,它会设置一个范围。当它只在一侧有一个字符时,它被简单地视为短划线字符。
在您的第一个正则表达式中,您以短划线(/^[a-z0-9 ,.-]*$/gi
)结束,因此它将其视为短划线字符。
在你的第二个(/^[a-z0-9 ,.-\r]*$/gi
)中,以\ r结尾,创建一个小范围.-\r
你应该能够通过将短划线移动到集合的结尾(或开头)或者转义它来解决这个问题:
/^[a-z0-9 ,.\r-]*$/gi
。 。 。要么 。 。
/^[a-z0-9 ,.\-\r]*$/gi