嗨,我需要使用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));
正如人们在下面指出的那样,你可以用一个前瞻的方式在一个正则表达式中完成这一切 .
您可以通过使用前瞻来实现这一目标
^(?=.*[a-z])(?=.*[A-Z])(?=.*[\d,.;:]).+$
看到它here on Regexr
前瞻是零宽度断言,这意味着它与字符不匹配,如果声明的断言为真,则从其位置进行检查 . 所有断言都是单独评估的,因此字符可以按任何顺序排列 .
^ 匹配字符串的开头
^
(?=.*[a-z]) 检查字符串中的某个位置是否为小写字符
(?=.*[a-z])
(?=.*[A-Z]) 检查字符串中的某个位置是否为大写字符
(?=.*[A-Z])
(?=.*[\d,.;:]) 检查字符串中的某个位置是否为数字或其他字符之一,添加所需的字符 .
(?=.*[\d,.;:])
.+$ 匹配字符串直到字符串结尾
.+$
只要其中一个断言失败,完整的正则表达式就会失败 .
根据你的要求:
[A-Z]+ 匹配任何大写字符
[A-Z]+
[a-z]+ 匹配任何小写字符
[a-z]+
[\d§$%&]+ 匹配数字或特殊字符(如果需要,可添加更多特殊字符)
[\d§$%&]+
结果如下所示: [A-Z]+[a-z]+[\d§$%&]+
[A-Z]+[a-z]+[\d§$%&]+
但这并不理想 . 您可能需要检查Regexr并尝试哪种正则表达式符合您的要求 .
如果你想要这些不一定是有序的,你需要一个前瞻 . 以下表达式将验证至少一个较低的char,一个较高的char和一个数字:
$result = preg_match('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])', $string);
你可以把很多特殊的字符加上数字,如下所示:
$result = preg_match('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9$%])', $string);
4 回答
如果匹配必须按照您描述的顺序进行,则可以使用
如果角色可以按任何顺序排列,我不太确定,不进行三次单独的检查:
正如人们在下面指出的那样,你可以用一个前瞻的方式在一个正则表达式中完成这一切 .
您可以通过使用前瞻来实现这一目标
看到它here on Regexr
前瞻是零宽度断言,这意味着它与字符不匹配,如果声明的断言为真,则从其位置进行检查 . 所有断言都是单独评估的,因此字符可以按任何顺序排列 .
^
匹配字符串的开头(?=.*[a-z])
检查字符串中的某个位置是否为小写字符(?=.*[A-Z])
检查字符串中的某个位置是否为大写字符(?=.*[\d,.;:])
检查字符串中的某个位置是否为数字或其他字符之一,添加所需的字符 ..+$
匹配字符串直到字符串结尾只要其中一个断言失败,完整的正则表达式就会失败 .
根据你的要求:
[A-Z]+
匹配任何大写字符[a-z]+
匹配任何小写字符[\d§$%&]+
匹配数字或特殊字符(如果需要,可添加更多特殊字符)结果如下所示:
[A-Z]+[a-z]+[\d§$%&]+
但这并不理想 . 您可能需要检查Regexr并尝试哪种正则表达式符合您的要求 .
如果你想要这些不一定是有序的,你需要一个前瞻 . 以下表达式将验证至少一个较低的char,一个较高的char和一个数字:
你可以把很多特殊的字符加上数字,如下所示: