我需要验证VARCHAR字段。 条件是:字段必须包含至少2个AlphaNumeric字符
所以请任何人给出上述条件的正则表达式
我写下面的表达式,但它会检查至少2个字母是字母数字。如果我的输入不是字母数字,那么它就是验证。
'^ [A-ZA-Z0-9] {2,} $'
请帮助.........
答案 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个版本:
.
结论:没有。与往常一样,您应该检查典型数据。