用于验证字段的正则表达式:字段必须包含至少2个AlphaNumeric字符

时间:2010-01-20 08:43:05

标签: regex validation

我需要验证VARCHAR字段。 条件是:字段必须包含至少2个AlphaNumeric字符

所以请任何人给出上述条件的正则表达式

我写下面的表达式,但它会检查至少2个字母是字母数字。如果我的输入不是字母数字,那么它就是验证。

'^ [A-ZA-Z0-9] {2,} $'

请帮助.........

5 个答案:

答案 0 :(得分:6)

[a-zA-Z0-9].*[a-zA-Z0-9]

简单的方法:在字符串中的任何地方至少有两个alnum。


回答评论
我从未做过(或打算做过)任何基准测试。因此 - 并且鉴于我们对OP的环境一无所知 - 我不能判断非贪婪版本([a-zA-Z0-9].*?[a-zA-Z0-9])是否会更有效率。然而, 认为,性能影响完全可以忽略不计:)

答案 1 :(得分:2)

我可能会使用这个正则表达式:

[a-zA-Z0-9][^a-zA-Z0-9]*[a-zA-Z0-9]

答案 2 :(得分:1)

您对字母数字的定义有多宽?对于US ASCII,请参阅上面的答案。对于更国际化的观点,请使用

之一
[[:alnum:]].*[[:alnum:]]

[^\W_].*[^\W_]

后者有效,因为\w匹配“单词字符”,字母数字和下划线。使用双阴影来排除下划线:“不是一个字符而不是下划线。”

答案 3 :(得分:0)

就像

一样简单
'\w.*\w'

答案 4 :(得分:0)

在回复评论时,这里是贪婪的[a-zA-Z0-9].*[a-zA-Z0-9]和非贪婪的[a-zA-Z0-9].*?[a-zA-Z0-9]的效果比较。

贪婪的版本将找到第一个字母数字,一直到最后匹配,并回溯到最后一个字母数字,找到最长的匹配。对于长字符串,它是最慢的版本。非贪婪版本找到第一个字母数字,并尝试不匹配以下符号,直到找到另一个字母数字(即,对于与空字符串匹配的每个字母,尝试匹配[a-zA-Z0-9],失败并匹配{{ 1}})。

基准测试(实证结果):
如果字母数字很远,贪婪的版本会更快(甚至比Gumbo的版本更快)。
如果字母数字相互接近,贪婪的版本会明显变慢。

测试:http://jsbin.com/eletu/4
比较3个版本:

.

结论:没有。与往常一样,您应该检查典型数据。