除了字母之外的正则表达式(javascript)

时间:2015-10-16 16:25:00

标签: javascript regex

我想通过检查输入包含任何字母来验证表单字段。应允许所有其他字符和数字。我对正则表达式很苛刻,我无法在任何地方找到正确的解决方案。

我试过这个:

/[^A-Za-z]/g

但是如果字符串只包含字母,则只返回false(即432ad32d也应返回false)。

有人能告诉我怎么做吗?

5 个答案:

答案 0 :(得分:2)

使用允许字符的白名单是您的最佳方法:

/^[-+\d(), ]+$/

Unicode有很多东西,它称之为字母,最好不要乱用它。并且JavaScript正则表达式不适合处理这些(例如,除非使用外部库,否则它们缺少\p{L}之类的东西。)

此外,通过使用白名单方法,您可以确定表单可接受的输入类型。您无法预测用户可能输入的混乱类型。想想like this

  

TO͇̹̺Ɲ̴ȳ̳TH̘Ë͖͖̉̉P̯͍̭O̚N̐Y̡H̸̡̪̯ͨ͊̽̅̾Ȩ̸̡̬̩̪̯̾͛ͪ̈ͨ͊̽̅̾͘Ȩ̬̩̾͛ͪ̈͘C̷̙̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝S̨̥̫͎̭ͯ̿̔

: - )

答案 1 :(得分:2)

/[^A-Za-z]/

此正则表达式匹配单个非字母,这不是非常有用。 Yura Yakym的答案匹配字符串的开头,任意数量的非字母,然后是字符串的结尾,这在匹配时很有用:它表示你的字符串只包含那些东西。

另一个有用的正则表达式是:

/[A-Za-z]/

这匹配单个字母,当它与匹配时非常有用:这意味着您的字符串根本不包含任何字母。

对于一般的问题,"我如何确保字符串缺少字母?",我会使用第二个正则表达式:我会尝试匹配一个字母,并希望不会这样做。但是,对于输入验证,我更喜欢描述所有可能有效输入的正则表达式。如果/^[^A-Za-z]*$/这样做,那么使用它。如果您有其他要求,请将其添加到其中。没有多个"没有字母?好。没有非破折号的特殊字符? OK" ......好吧,除非你想提供关于这些事情的错误信息。

答案 2 :(得分:1)

试试这个正则表达式:^[^A-Za-z]*$

答案 3 :(得分:0)

您需要包含锚点

/^[^A-Za-z]+$/g

这将确保字符串以一个或多个数字/特殊字符开头和结尾

答案 4 :(得分:0)

您忘记了开始和结束标记。你也不需要g旗帜。

/^[^A-Za-z]*$/

无论如何,这很奇怪,因为我仍然可以输入圆圈字母。