PHP preg_match字母数字匹配,至少有一个大写字符


php preg_match alpha-numeric, with at least one upper case character

preg_match("/^([0-9a-zA-Z])+$/", $newvalue)

我有上面的preg_match代码,检查用户输入是否至少有一个小写,一个大写和一个数字值。

,但这似乎不起作用,因为它接受数值,如果它们是数字或小写或大写。并不能确保其中一个存在

需要修复什么?

试试这个。它检查包含至少一个数字、一个小写字符串和一个大写字符串

的$newvalue的所有条件
preg_match("(^(?=.*[a-z])(?=.*[A-Z])(?=.*'d).+$)",$newvalue)

的例子:

<?php 
if(preg_match("(^(?=.*[a-z])(?=.*[A-Z])(?=.*'d).+$)","RoHan123aA"))
{
  echo ":) success";
}
else
{
  echo ":(";
}
?>

参考。它的工作原理。

您刚刚定义了一个应用于整个字符串的字符类。它不检查每个单独的范围是否存在一次。通常在PHP代码中使用三个比较/preg_match调用来完成此操作。

但是在这种情况下,使用一些断言也很简单:

 preg_match("/^(?=.*[A-Z])(?=.*'d)([0-9a-zA-Z]+)$/", $newvalue)

你想加多少就加多少。它们同时应用,并为[0-9a-zA-Z]组已经匹配的字符串提供额外的匹配条件。