2

我有一个文本区域,我只想在其中允许 az 0-9 \s .,- 和 \r \n

我正在使用 JQuery 3rd 方插件。这就是我对验证规则的要求:

        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"
    });

这适用于 az 0-9 ,.-

但是,当我在这些 sq.brackets 中添加 \r 时,它允许输入验证哪个不会抛出消息,但用户可以输入他们想要的任何字符并验证。如果需要,消息会显示焦点离开文本区域的时间。

我还为多行添加了 'm' 标志,但没有添加给我相同效果的 \r。

一个星期以来一直在为此挠头,才刚刚开始学习正则表达式。有谁知道我应该寻找哪个方向来解决这个问题?

4

2 回答 2

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)

于 2013-03-04T17:39:54.460 回答
1

我认为您的问题与“-”字符有关。在字符集(“[xyx]”)中,破折号是少数特殊字符之一。当它出现在两个字符之间时,它会设置一个范围。当它仅在一侧有字符时,它被简单地视为破折号字符。

在您的第一个正则表达式中,您以破折号 ( /^[a-z0-9 ,.-]*$/gi) 结尾,因此它将其视为破折号字符。

在您的第二个 ( /^[a-z0-9 ,.-\r]*$/gi) 中,您以 \r 结尾,创建了一个小的子范围.-\r

您应该能够通过将破折号移动到集合的末尾(或开头)或将其转义来解决此问题:

/^[a-z0-9 ,.\r-]*$/gi

. . . 或者 。. .

/^[a-z0-9 ,.\-\r]*$/gi

于 2013-03-04T18:02:51.437 回答