【问题标题】:Password field regular expression [closed]密码字段正则表达式[关闭]
【发布时间】:2012-10-16 12:38:01
【问题描述】:

好的,所以我正在尝试使用正则表达式 preg_match 一个字符串(输入的密码),但是在互联网上阅读/观看正则表达式信息数小时后,我仍然不明白它..

我目前有:
'/^[A-Z]^[a-z]+$/'

密码必须:

介于 8 到 16 个字符之间。
至少包含 1 个大写字母
至少包含 1 个小写字母
包含至少 1 个数字

如果您还可以包含一个具有上述所有要求的正则表达式,而且还具有
包含至少 1 个符号

对于我自己的学习,我将不胜感激。 请尝试解释您的正则表达式,以便我可以理解它。谢谢!

【问题讨论】:

  • 正如我所提到的,我已经阅读了几个小时并在 YouTube 上观看了视频,但仍然找不到我想要的内容
  • 如果您在使用正则表达式时遇到问题,请尝试使用 regexr.com 网站,这将允许您在输入正则表达式时动态评估它。

标签: php regex validation preg-replace


【解决方案1】:
  1. 8 到 16 个字符之间:

    ^.{8,16}$
    
  2. 至少一个大写字母

    (?=.*[A-Z])
    
  3. 至少一个小写字母

    (?=.*[a-z])
    
  4. 至少一个数字

    (?=.*\d)
    

把它放在一起:

^(?=.*[A-Z])(?=.*[a-z])(?=.*\d).{8,16}$

如果你想要一个支持 Unicode 的变体(我知道 PHP 可能是徒劳的):

^(?=.*\p{Lu})(?=.*\p{Ll})(?=.*\p{Nd}).{8,16}$

这通过在开头有多个positive lookahead assertions 来工作,每个positive lookahead assertions 检查字符串的一个所需属性。前瞻断言检查括号中的部分是否可以在此位置匹配,但不会推进字符串中的实际匹配位置。这里的实际匹配只是确保长度符合您的要求。

但请注意,这在计算上应该与检查每个属性的多个正则表达式匹配基本上相同。它只是打包在一个正则表达式中。

哦,至少可以用(?=.*[,.!?]) 或类似的东西检查至少一个符号,这取决于您认为符号的含义。

【讨论】:

  • +1,简洁明了。
  • 你在 10 秒的阅读时间内教会了我比整个 Google 和 YouTube 更多的东西。谢谢。
  • 乔治:看regular-expressions.info。这是一个学习正则表达式如何工作的很棒的网站。这和实践教会了我几乎所有我现在所知道的(还有一点 SO)。
  • ^(?=.*[A-Z])(?=.*[a-z])(?=.*\d).{8,16}$ >> 不计算大写 ^(? =.*\p{Lu})(?=.*\p{Ll})(?=.*\p{Nd}).{8,16}$ >> 不计算任何字符 regex.larsolavtorvik.com 我在这里测试它
  • 作为后续,我想知道是否可以使 RegExp 充当输入掩码 I.E:对于日期,字符串需要等于 00/00/0000,其中 0 = 任意整数?谢谢。
猜你喜欢
  • 2015-12-27
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多