2015-10-16 136 views
1

我想通过检查包含任何字母的输入来验证表单域。所有其他字符和数字应该被允许。我在正则表达式方面很糟糕,而且我无法在任何地方找到正确的解决方案。正则表达式除了字母(javascript)

我已经试过这样:

/[^A-Za-z]/g 

但这只是返回false如果字符串只包含字母(即432ad32d应该返回false以及)。

谁能告诉我该怎么做?

+2

是否允许? ;-)那么'ݰ'或'Ӝ'呢? –

+0

好问题。否:)我想用它来验证电话号码,但由于有些人使用某些字符,我宁愿不检查数字。但是,考虑它,也许最好检查允许的字符(0-9, - ,+,(,)和空格)。长度并不重要。 – Leon

+3

这就是我希望你做出的结论:) –

回答

1

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

+0

“*”运算符匹配零个或多个表达式。所以它会匹配一个空字符串。我想你的意思是'+' –

+0

问题是要检查字符串是否不包含任何字母。所以空字符串没有字母。它用于表单验证。所以,也许需要允许空字符串? –

0

您需要包括锚

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

这将确保该字符串的开始和一个或多个数字/特殊字符

2

使用结束允许字符的白名单是您的案例中的最佳方法:

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

Unicode有很多东西叫做这个字母,最好不要把它弄糟。而JavaScript正则表达式不适合处理这些(除非使用外部库,否则它们缺少像\p{L}这样的东西)。

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

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

:-)

+0

最好和最完整的答案恕我直言。 – Thomas

2
/[^A-Za-z]/ 

此正则表达式一个非字母,这是不是很实用相匹配。 Yura Yakym的答案匹配字符串的开头,任意数量的非字母,然后匹配字符串的末尾,匹配时它很有用:它意味着您的字符串只包含那些东西。

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

/[A-Za-z]/ 

这一个字母,这是非常有用的当它不匹配匹配:这意味着你的字符串中不包含任何字母都没有。

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

0

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

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

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