php: preg_match 因特殊字符模式而失败

标签 php regex

我对 php 正则表达式有疑问。我在 JS 中有相同的正则表达式并且它有效。我不知道是什么问题。

这是 php 代码正则表达式:

echo $password; // 9Gq!Q23Lne;<||.'/\
$reg_password = "/^[-_0-9a-záàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ0\d!@#$%^&*()_\+\{\}:\"<>?\|\[\];\',\.\/\x5c~]{6,30}$/i";
if(isset($password) &&
  (!preg_match($reg_password, $password) || !preg_match("#[a-z]#", $password) || !preg_match("#[\d]#", $password))
){
   echo "you failed";
 }

来自 html 输入的原始密码:

9Gq!Q23Lne;<||.\'/\  

它与 $reg_password 之前的值相同。

我已经使用 mysqli 方法中的 escape_string 进行了测试,但它也不起作用:

$password = $this->db->escape_string($password);
echo $password; // 9Gq!Q23Lne;<||.\'/\\

我不知道我的问题是什么,因为我用过regex101.com测试它并且它有效..

有什么想法吗? 谢谢

最佳答案

在你的模式中,你需要使用单引号而不是双引号;)

所以会变成这样

$reg_password = '/^[-_0-9a-záàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ0\d!@#$%^&*()_\+\{\}:\"<>?\|\[\];\',\.\/\x5c~]{6,30}$/i';

关于php: preg_match 因特殊字符模式而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31348728/

相关文章:

php - 我如何从多个表单中获取值并提交它们?

PHP 新手,有一段令人困惑的代码

java - 为 "(5+x)"等字符串创建 regExp

java - Java中的正则表达式并忽略空格

php - 为 mybb 中的所有用户返回相同的 uid 和电子邮件

php - 检测到 mysql 数据库的选项

php - 正则表达式:匹配所有重复字符 PHP

python - CountVectorizer token_pattern 不捕获下划线

javascript - 正则表达式匹配是否比检查对象集合中的键更有效?

php - 更好的 strip 化方法 php 正则表达式