PHP正则表达式检查字符串是否包含大小写字母

3

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

编辑:这是针对密码的,其中可能还包含数字字符,因此大写和小写字母可能不会挨在一起。

2个回答

6
我猜您的意思是“ASCII字符”。
简单的正则表达式:[A-Z].*[a-z]|[a-z].*[A-Z]
简洁的正则表达式:^(?=.*?[A-Z])(?=.*?[a-z])
“简单”变体只检查两种可能性:大写字母在小写字母之前或反之。
“优雅”的变体使用两个正向先行断言扫描字符串,而不实际移动正则表达式引擎或匹配任何内容。
与第一种方法相比,这种变体非常易于扩展以进行更多检查,并允许您在检查它是否满足您的要求后“消耗”字符串。

1
我认为你也可以匹配Unicode字母:^(?=.*\p{Lu})(?=.*\p{Ll}) 不过没有测试过。 - Justin Morgan
抱歉,原问题稍作修改。我忘了提到里面可能还有数字。第二个解决方案对此也适用吗? - BadHorsie
1
@BadHorsie 是的,只需添加另一个前瞻即可。第一种变体变得更加复杂,因为有三个要检查的事情,不再是2种排列可能性,而是6种。 - Tomalak
@Justin:没错。值得注意的是,并非所有的正则表达式语言都原生支持这个功能(例如像 JavaScript 或 PHP 这样流行的语言就不支持)。 - Tomalak
@Tomalak - 是的,我不了解PHP,所以我不确定那是否可行。我才发现本周JS正则表达式几乎没有意识Unicode。根据这个,如果使用u标志,PHP(像Ruby一样)将支持它们。无论如何,+1。 - Justin Morgan

4

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

代码如下:

$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';
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接