【问题标题】:PHP check that string has 2 numbers, 8 chars and 1 capitalPHP 检查字符串是否有 2 个数字、8 个字符和 1 个大写字母
【发布时间】:2012-05-08 15:42:43
【问题描述】:

我发现了很多 php 正则表达式和其他选项来确定字符串长度,以及它是否包含一个字母或一个数字,但是我如何确定一个字符串中是否包含 2 个数字?

我正在尝试验证密码

  • 必须正好有 8 个字符

  • 其中一个必须是大写字母

  • 其中2个必须是数字

是否有单行正则表达式解决方案?

【问题讨论】:

  • 为什么要将密码长度限制为 8 个字符?希望你不是在银行工作......
  • 仅供参考,你是我的英雄。很棒的解决方案。
  • 也许您可以尝试说服您的客户解除该限制?任何家用电脑都可以在几个小时内暴力破解的密码有什么用?

标签: php regex character uppercase digits


【解决方案1】:
if (preg_match(
    '/^            # Start of string
    (?=.*\p{Lu})   # at least one uppercase letter
    (?=.*\d.*\d)   # at least two digits
    .{8}           # exactly 8 characters
    $              # End of string
    /xu',     
    $subject)) {
    # Successful match

(?=...) 是一个lookahead assertion。它检查某个正则表达式是否可以在当前位置匹配,但实际上并不消耗字符串的任何部分,因此您可以将其中的几个放在一行中。

【讨论】:

  • 我建议在发送之前对您的答案进行校对:P 无法通读一遍,而不会提示您为后续的每次编辑重新加载它
  • @Codemonkey:是的,对不起。首先我放错了其中一个 cmets,然后我才意识到他要正好 8 个字符。对于密码限制来说,这是一个可怕的想法......
  • 是的,它在问题中这么说:-)
  • +1 具有前瞻性的出色解决方案。不知道他们可以这样使用。我正在使用三个单独的查询来编写答案来进行验证,但我更喜欢这个。你能解释一下\p{Lu} 部分的作用,以及u 修饰符吗?
  • @billwilliams:如果答案有效(看起来确实有效),请点击绿色复选标记接受它:-)
猜你喜欢
  • 2012-03-17
  • 2019-03-18
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多