在php上的preg_match中限制字符串

时间:2016-06-20 21:42:30

标签: regex string preg-match

感谢您访问或只是看到我的问题 我尝试在php上捕获字符串中的一些模式。

模式:
min char = 100
max char = 100
包含[a-z]和[A-Z]和[0-9]以及"#"和" - "和" ="和" +"

如果所有模式匹配并且在字符串中找到,则返回TRUE 否则它将返回FALSE。

$string = "jhJH#KJNkj-HJV=+0ksdbscasdJNKajcajnacakjBKBKjbidcubiISABUIhsdbchdsiweucIBHbhbHBUJHBjhJHBIYBHBCwJHBdcd";
if (preg_match("/^.*(?=.{100,100})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[#])(?=.*[-])(?=.*[=])(?=.*[+]).*$/", $string)){
    $result1 = true;    
} else {
    $result1 = false;
}

如果100个字符,则此方法有效,但如果字符串长度超过100位,则返回TRUE 我想要返回TRUE,如果字符串长度低于100位而不是超过100位且它应该包含一个模式。
也许在模式中有任何建议吗?

谢谢你的进步

1 个答案:

答案 0 :(得分:2)

你实际上没有设置最小和最大长度,因为在字符串中实际需要100个字符之前允许0 +除换行之外的任何字符。你需要使用

'/^(?=\D*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=[^#]*#)(?=[^-]*-)(?=[^=]*=)(?=[^+]*[+]).{0,100}$/s'
                                                                                       ^^^^^^^

这里,模式将匹配0到100任何字符包括。换行符(/s允许.匹配换行符)并且要求至少1位,1小写,1大写,1 #,1 -,1 {{ 1}}和一个=

实际上,有7个条件具有特定要求,因此实际上,最小值为7个字符。您需要将此模式调整为您真正需要的模式。