我正在寻找一些帮助创建一个正则表达式,需要8个字符(至少)与w / 1数字和1个字符(不是特殊字符)。
示例:a1234567有效,但12345678不是
有关正则表达式newb的任何帮助吗?
编辑:
感谢快速回复 - 在VB中实现的实现如下所示
Dim ValidPassword As Boolean = Regex.IsMatch(Password, "^(?=.*[0-9])(?=.*[a-zA-Z])\w{8,}$")
答案 0 :(得分:6)
类似
^(?=.*[0-9])(?=.*[a-zA-Z])\w{8,}$
会起作用
解剖:
^
字符串的开头(?=.*[0-9])
向前看并确保至少有一位(?=.*[a-zA-Z])
向前看并确保至少有一个字母\w{8,}
实际上匹配8个以上的字符$
字符串的结尾修改:如果您需要额外的字符(不计入1个字母的要求)请使用
^(?=.*[0-9])(?=.*[a-zA-Z]).{8,}$
这将允许使用除换行之外的任何字符
如果您只想要允许某些字符,请将第一个正则表达式中的\w
替换为[A-Za-z0-9@#$%^&*]
,并选择符号
<击> ^(?![0-9]的 $)(?![A-ZA-Z _] $)\ W {8,} $ 击>
答案 1 :(得分:2)
你真的需要一个带有三个正则表达式的表达式:)
/\w{8}/
给出最小值8 A-Z,a-z,0-9和_ chars
/\d/
找到一个数字
/[A-Za-z]/
找到一个字母。
所以,在Perl:
$string =~ /\w{8}/ and $string =~ /\d/ and $string =~ /[A-Za-z]/
答案 2 :(得分:1)
使用positive look-ahead assertion尝试此正则表达式:
(?=[a-zA-Z]*[0-9])(?=[0-9]*[a-zA-Z])^[0-9a-zA-Z]{8,}$
部分是:
(?=[a-zA-Z]*[0-9])
检查至少一个字符0-9 (?=[0-9]*[a-zA-Z])
检查至少一个字符集a-z,A-Z ^[0-9a-zA-Z]{8,}$
会检查至少8次出现0-9,a-z,A-Z的长度。或仅使用基本语法:
^([0-9][a-zA-Z][0-9a-zA-Z]{6,}|[0-9]{2}[a-zA-Z][0-9a-zA-Z]{5,}|[0-9]{3}[a-zA-Z][0-9a-zA-Z]{4,}|[0-9]{4}[a-zA-Z][0-9a-zA-Z]{3,}|[0-9]{5}[a-zA-Z][0-9a-zA-Z]{2,}|[0-9]{6}[a-zA-Z][0-9a-zA-Z]+|[0-9]{7}[a-zA-Z][0-9a-zA-Z]*|[a-zA-Z][0-9][0-9a-zA-Z]{6,}|[a-zA-Z]{2}[0-9][0-9a-zA-Z]{5,}|[a-zA-Z]{3}[0-9][0-9a-zA-Z]{4,}|[a-zA-Z]{4}[0-9][0-9a-zA-Z]{3,}|[a-zA-Z]{5}[0-9][0-9a-zA-Z]{2,}|[a-zA-Z]{6}[0-9][0-9a-zA-Z]+|[a-zA-Z]{7}[0-9][0-9a-zA-Z]*)$