我想通过检查输入包含任何字母来验证表单字段。应允许所有其他字符和数字。我对正则表达式很苛刻,我无法在任何地方找到正确的解决方案。
我试过这个:
/[^A-Za-z]/g
但是如果字符串只包含字母,则只返回false(即432ad32d也应返回false)。
有人能告诉我怎么做吗?
答案 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]*$/
无论如何,这很奇怪,因为我仍然可以输入圆圈字母。