我正在使用带有 .NET 的 C# 构建用户注册表单。我需要验证用户输入的密码字段。验证要求如下。
- 它应该是字母数字 (az , AZ , 0-9)
- 它应该接受 6-10 个字符(最少 6 个字符,最多 10 个字符)
- 至少包含 1 个字母和数字(例如
stack1over
:)
我正在使用如下正则表达式。
^([a-zA-Z0-9]{6,10})$
它满足我的前两个条件。当我只输入字符或数字时它会失败。
我正在使用带有 .NET 的 C# 构建用户注册表单。我需要验证用户输入的密码字段。验证要求如下。
stack1over
:)我正在使用如下正则表达式。
^([a-zA-Z0-9]{6,10})$
它满足我的前两个条件。当我只输入字符或数字时它会失败。
如果可以的话,通过多个正则表达式传递它。它会比那些超前的怪物干净得多:-)
^[a-zA-Z0-9]{6,10}$
[a-zA-Z]
[0-9]
尽管有些人可能认为它很聪明,但没有必要使用单个正则表达式(有时甚至使用任何正则表达式 - 只需见证希望正则表达式检测 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]$")
我知道我更愿意维护哪一个 :-)
使用积极的前瞻
^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]{6,10}$
环顾四周也称为零宽度断言。它们是零宽度,就像行的开始和结束 (
^
,$
)。不同的是,lookarounds 实际上会匹配字符,但随后放弃匹配并只返回结果:匹配或不匹配。这就是为什么它们被称为“断言”。它们不消耗字符串中的字符,而只是断言匹配是否可能。
环顾四周的语法:
(?=REGEX)
积极前瞻(?!REGEX)
负前瞻(?<=REGEX)
积极的回顾(?<!REGEX)
负面回顾string r = @"^(?=.*[A-Za-z])(?=.*[0-9])[A-Za-z0-9]{6,10}$";
Regex x = new Regex(r);
var z = x.IsMatch(password);