如何在正则表达式中匹配反斜杠

3

我希望我的用户密码规则如下:

  1. 至少包含一个字母和一个数字。
  2. 可以包含特殊字符(几乎所有键盘上的特殊字符)。
  3. 长度大于8个字符。

这是我的正则表达式:

/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d!"#$%&'()*+,-.\/:;<=>?@[\]^_`{|}~]{8,}$/

但是它匹配不上反斜杠。例如,密码“3e5t1qa2w\”将会失败。

我使用Laravel(PHP框架)验证,所以完整的代码如下:

        'password' => array(
            'sometimes',
            'required',
            'between:8,32',
            'regex:/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d!"#$%&\'()*+,-.\/:;<=>?@[\]^_`{|}~]{8,}$/'
        ),

这是真正的代码: enter image description here

但使用两个反斜杠的这个代码也无法工作: enter image description here

有人知道为什么吗?


我相信你需要用另一个反斜杠来转义反斜杠。 - MateoConLechuga
/ 是斜杠或正斜杠;\ 是反斜杠。 - Chris
2
你真的需要阅读这篇文章:https://dev59.com/yHRC5IYBdhLWcg3wJNYN - user557846
[\] 应该改为 [\] - MateoConLechuga
1
首先,你希望密码的长度超过八位,但是你提供的示例密码只有六个字符。 - robere2
显示剩余4条评论
2个回答

2

你的解决方案在 Laravel 5.4 版本中对我不起作用,但是在接近结尾处使用 4 条反斜杠可以解决问题。如果有人遇到同样的问题,我会将其留在这里:

/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d!"#$%&'()*+,-.\/:;<=>?@[\]^_`{|}~\\\\]{8,}$/

DEMO


0

这个可以工作:

enter image description here

正如MateoConLechuga所说,"]"可能会导致问题。因此我用反斜杠转义"["和"]",这意味着它们只是普通的字符。
而这个链接Right way to escape backslash [ \ ] in PHP regex?帮助我了解到,要匹配反斜杠,我必须写三次(或四次)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接