仅匹配特定字符的正则表达式模式

39

我是一个正则表达式的新手,这个问题让我感到困惑。这是用于JavaScript函数的。

我需要验证输入是否仅符合以下标准:

  • 字母A-Z(大写和小写)
  • 数字0-9
  • 以下其他字符:空格、句点(.)、逗号(,)、加号(+)和破折号(-)

我可以轻松地为前两个条件编写模式,但第三个条件更难。这是我最后尝试过的模式,但它似乎无法与测试字符串Farh%%$$+++,配合使用

这是我正在尝试的模式

[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\\+\\.\\,\\s]*$ 

它失败的原因是在提交表单时允许了文本字段中未指定的字符。

任何帮助都将不胜感激。

5个回答

65

我刚刚测试了一下,至少从我的第一轮测试中看来,它似乎可以正常工作。

^[a-zA-Z 0-9\.\,\+\-]*$

2
除了匹配空字符串(和制表符),您不需要转义任何这些字符。 - SilentGhost
@SlientGhost 对于空字符串的观点很好,但从技术上讲,任何允许空格的东西,使用单个字符类将允许所有空格。至于转义,我只是小心谨慎,因为我在通过.NET RegEx测试器运行它并看到了有趣的结果。 - Mitchel Sellers
我认为这样可能行。必须添加0-9才能匹配数字。 - RHPT
你看,这不仅仅是制表符的问题,在Javascript中\s匹配空格、制表符、换行符以及任何Unicode空白字符,这似乎比OP想要的略多一些。 - SilentGhost
啊,是的,忘记了0-9,并且去掉了 \s。 - Mitchel Sellers
一个问题,为什么需要 ''? - Flezcano

16

短横线需要放在首位,以避免被解释为区间分隔符。另外,请确保你的正则表达式在开头和结尾处用^和$进行锚定,以便整个测试字符串都被正则表达式匹配。

/^[-+., A-Za-z0-9]+$/

3
破折号也可以出现在字符范围的末尾或者中间,以避免被解释为范围分隔符:[a-z0-9-][a-z-0-9] 也是有效的表达式。 - Gumbo

3
/^[a-z0-9 .,+-]+$/i

1

为了仅验证选择器作为ID(根据允许的字符https://www.w3.org/TR/html4/types.html#type-id):

var isValidIdSelector = function (str) {
    var regex = new RegExp(/^[A-Za-z][A-Za-z0-9_\-\:\.]*$/gm);
    return regex.test(str);
};

-4
ng-pattern="/^[a-zA-Z0-9/&quot&quot\\\]\[:;|=,+*?<>]+$/"

允许使用的字符:字母数字 + " / \ [ ] : ; | = , + * ? <>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接