Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php正则表达式需要检查字符串是否至少有一个大写字符、一个小写字符和一个数字或符号_Php_Regex - Fatal编程技术网

php正则表达式需要检查字符串是否至少有一个大写字符、一个小写字符和一个数字或符号

php正则表达式需要检查字符串是否至少有一个大写字符、一个小写字符和一个数字或符号,php,regex,Php,Regex,嗨,我需要使用php的pregmatch来检查字符串是否有效。为了有效,字符串需要至少有一个大写字符、至少一个小写字符,然后至少有一个符号或数字 谢谢如果必须按照您描述的顺序进行匹配,您可以使用 $result = preg_match('/[A-Z]+[a-z]+[\d!$%^&]+/', $string); 如果字符可以按任何顺序排列,我不太确定,如果不进行三个单独的检查,例如: $result = (preg_match('/[A-Z]+/', $string) &&am

嗨,我需要使用php的pregmatch来检查字符串是否有效。为了有效,字符串需要至少有一个大写字符、至少一个小写字符,然后至少有一个符号或数字


谢谢

如果必须按照您描述的顺序进行匹配,您可以使用

$result = preg_match('/[A-Z]+[a-z]+[\d!$%^&]+/', $string);
如果字符可以按任何顺序排列,我不太确定,如果不进行三个单独的检查,例如:

$result = (preg_match('/[A-Z]+/', $string) && preg_match('/[a-z]+/', $string) && preg_match('/[\d!$%^&]+/', $string));

正如人们在下面指出的,您可以使用lookaheads在一个正则表达式中完成这一切。

根据您的要求:

[A-Z]+
匹配任何大写字符

[a-z]+
匹配任何小写字符

[\d§$%&]+
匹配数字或特殊字符(如果需要,请添加更多特殊字符)

结果如下:
[A-Z]+[A-Z]+[\d§$%&]+


但这并不理想。您可能需要检查并尝试哪种正则表达式符合您的要求。

您可以通过使用lookaheads来实现这一点

^(?=.*[a-z])(?=.*[A-Z])(?=.*[\d,.;:]).+$
看到了吗

前瞻是零宽度断言,这意味着它不匹配字符,它从其位置检查声明的断言是否为真。所有断言都是单独计算的,因此字符可以是任意顺序

^
匹配字符串的开头

(?=.[a-z])
检查字符串中是否有小写字符

(?=.[A-Z])
检查字符串中是否有大写字符

(?=.[\d,.;:])
检查字符串中是否有数字或其他字符,然后添加所需字符

+$
匹配字符串,直到字符串结束


一旦其中一个断言失败,整个正则表达式就会失败。

如果您希望这些断言不一定是有序的,则需要进行前瞻。以下表达式将验证至少一个低位字符、一个高位字符和一个数字:

$result = preg_match('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])', $string);
您可以在数字中添加许多特殊字符,如下所示:

$result = preg_match('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9$%])', $string);

这些可以是任意顺序,还是需要先有大写字符,然后是小写字符,然后是符号或数字?团体可以混合吗?为什么是正则表达式?php没有诸如
isdigit()
islower()
之类的函数吗?@fge有is_numeric(),但整个字符串必须是数字,而不仅仅是其中的一部分。像islower()这样的函数不存在,但可以很容易地用(strtolower($string)==$string)编写。最后一个匹配将允许空格和各种特殊字符,可能不是最好的主意。