【问题标题】:PHP regular expression to check string contains upper and lowercase lettersPHP正则表达式检查字符串是否包含大小写字母
【发布时间】:2011-07-22 14:49:37
【问题描述】:

检查一个字符串是否至少包含一个大写字母和一个小写字母的最简单的正则表达式是什么?

编辑:这是用于可能还存在数字字符的密码,因此大写和小写字符可能不会彼此相邻。

【问题讨论】:

    标签: php regex


    【解决方案1】:

    我怀疑你的意思是“ASCII 字符”。

    • 简单:[A-Z].*[a-z]|[a-z].*[A-Z]
    • 优雅:^(?=.*?[A-Z])(?=.*?[a-z])

    “简单”变体只检查两种可能性:大写字符出现在小写之前,或者相反。

    “优雅”变体使用两个肯定的前瞻断言来扫描字符串,而无需实际向前移动正则表达式引擎或匹配任何内容。

    与第一种方法相比,此变体非常容易扩展以进行更多检查,并且它允许您在检查字符串是否满足您的要求后使用字符串。

    【讨论】:

    • 我认为你也可以使用 Unicode 字母:^(?=.*\p{Lu})(?=.*\p{Ll}) 虽然没有测试。
    • 抱歉,原问题稍作修改。我忘了提到那里也可能有数字。第二种解决方案是否适用?
    • @BadHorsie 是的,只需添加另一个前瞻。第一个变体变得更加复杂,因为要检查三件事,它不再是 2 种可能的排列方式,而是 6 种。
    • @贾斯汀:是的。值得注意的是,并非所有的正则表达式都本机支持这一点(例如,JavaScript 或 PHP 等流行的不支持)
    • @Tomalak - 是的,我不了解 PHP,这就是为什么我不确定这是否可行。我这周才发现 JS 正则表达式有 almost no awareness 的 Unicode。 According to this,如果您使用 u 标志,PHP(如 Ruby)将支持它们。无论如何,+1。
    【解决方案2】:

    也可以在不使用正则表达式的情况下检查字符串中的大小写。

    此代码如下所示:

    $word = 'AA1FAa';
    
    // Check if word has both uppercase and lowercase letters
    if(strtolower($word) != $word && strtoupper($word) != $word){
        echo 'Has both upper and lower case letters';
    }else{
        echo 'Does not have both upper and lower case letters';
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多