JavaScript Regexp - 允许回车允许其他不需要的字符验证

时间:2013-03-04 17:28:00

标签: javascript regex carriage-return

我有一个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了。有没有人知道我应该向哪个方向寻求解决这个问题?

2 个答案:

答案 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