我正在使用C#with .NET构建用户注册表单。 我需要验证用户输入的密码字段。 验证要求如下。
stack1over
)我正在使用如下的正则表达式。
^([a-zA-Z0-9]{6,10})$
满足我的前两个条件。 当我只输入字符或数字时,它会失败。
答案 0 :(得分:9)
如果可以的话,将它传递给多个正则表达式。它比那些超前的怪物要清洁得多: - )
^[a-zA-Z0-9]{6,10}$
[a-zA-Z]
[0-9]
虽然有些人可能认为它很聪明,但没有必要用一个正则表达式来做所有(或者甚至用任何正则表达式,有时候 - 只是见证那些希望正则表达式检测75和75之间的数字的人4093)。
您是否愿意看到一些干净利落的代码,如:
if not checkRegex(str,"^[0-9]+$")
return false
val = string_to_int(str);
return (val >= 75) and (val <= 4093)
或类似的东西:
return checkRegex(str,"^7[5-9]$|^[89][0-9]$|^[1-9][0-9][0-9]$|^[1-3][0-9][0-9][0-9]$|^40[0-8][0-9]$|^409[0-3]$")
我知道哪个我更愿意维护: - )
答案 1 :(得分:7)
使用正面lookahead
^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]{6,10}$
环顾四周也被称为零宽度断言。它们的零宽度就像行的开头和结尾一样(
^
,$
)。区别在于,lookarounds实际上匹配字符,但随后放弃匹配并仅返回结果:匹配或不匹配。这就是他们被称为“断言”的原因。它们不消耗字符串中的字符,但仅断言是否可以匹配。
环顾四周的语法:
(?=REGEX)
积极向前看(?!REGEX)
否定前瞻(?<=REGEX)
积极向后看(?<!REGEX)
负面的背后隐藏答案 2 :(得分:0)
string r = @"^(?=.*[A-Za-z])(?=.*[0-9])[A-Za-z0-9]{6,10}$";
Regex x = new Regex(r);
var z = x.IsMatch(password);