正在寻找一个正则表达式 - 8个char min w / 1 num和1个char

时间:2009-06-26 18:51:44

标签: regex

我正在寻找一些帮助创建一个正则表达式,需要8个字符(至少)与w / 1数字和1个字符(不是特殊字符)。

示例:a1234567有效,但12345678不是

有关正则表达式newb的任何帮助吗?

编辑:

感谢快速回复 - 在VB中实现的实现如下所示

Dim ValidPassword As Boolean = Regex.IsMatch(Password, "^(?=.*[0-9])(?=.*[a-zA-Z])\w{8,}$")

3 个答案:

答案 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]*)$