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



我有一个文本区,我想只允许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

相关内容

最新更新