密码正则表达式

时间:2011-06-13 20:42:34

标签: regex validation

我需要提出一个正则表达式来验证具有以下要求的字符串:

  1. 仅包含字母数字和以下特殊字符:!@#$%^& *
  2. 包含上面列表中至少一个特殊字符
  3. 所需的特殊字符可以出现在字符串中的任何位置(例如:!abc,a!bc,abc!)
  4. 我一直在接近,但在其中一个条件下失败了。

    谢谢!

4 个答案:

答案 0 :(得分:2)

您正在寻找的正则表达式是:

/^(?=.*[!@#$%^&*])[A-Za-z0-9!@#$%^&*]+$/

这将保证字符串包含一个使用(?=)正向前瞻的特殊字符。

- 编辑 -

看来Bohemian决定完全忽略我的回答的评论部分并编辑上面的例子来删除它的“不必要的”字符转义。我真的希望他没有,因为我相信我的理由是正确的,但你有它。我最初的例子是:

/^(?=.*[\!\@\#\$\%\^\&\*])[A-Za-z0-9\!\@\#\$\%\^\&\*]+$/

答案 1 :(得分:1)

^(?=.*?[!@#$%\^&*])((?!_)[\w!@#$%\^&*])+$

它确保在字符串中的任何位置找到特殊字符。一旦找到它,它就匹配字符串的其余部分,只要字符串只包含单词字符,数字和特殊字符。

编辑:negativelookahead阻止_(下划线)。

答案 2 :(得分:0)

假设您希望“至少一个非字母数字字符,至少8个字符”的最低要求。使用两个前瞻:

^(?=.*[^a-zA-Z0-9])(?=.{8,}$)

除此之外 - 让用户选择他们喜欢的密码。

答案 3 :(得分:0)

这个似乎正在起作用:

^.*(?=.*[a-zA-Z])(?=.*[!@#$%^&*]).*$

如果您还想设置最小长度,请使用此选项(最少使用10个字符):

^.*(?=.{10,})(?=.*[a-zA-Z])(?=.*[!@#$%^&*]).*$

请参阅rubular