【问题标题】:how to match the back slash in the regular expression如何匹配正则表达式中的反斜杠
【发布时间】:2017-05-07 14:23:35
【问题描述】:

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

  1. 至少一个字母,至少一个数字。
  2. 可以包含特殊字符(几乎所有的特殊字符在 键盘)
  3. 长度超过 8。

这是我的正则表达式

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

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

我使用 laravel(php framework) 验证,所以完整代码是这样的:

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

这是真正的代码

而这个使用两个反斜杠的也不起作用。

有人知道为什么吗?

【问题讨论】:

  • 我相信你需要用另一个反斜杠来转义反斜杠。
  • 是的,我喜欢......[反斜杠反斜杠]........但没用
  • / 是斜杠或正斜杠; \ 是一个反斜杠。
  • 你真的需要阅读这个:stackoverflow.com/questions/401656/…
  • 您希望长度超过 8,但您提供的示例密码只有六个字符,对于初学者来说。

标签: php regex laravel validation preg-match


【解决方案1】:

您的解决方案在 Laravel 5.4 中对我不起作用,但使用 4 个反斜杠可以(在近端)。如果有人有同样的问题,我会把它留在这里:

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

DEMO

【讨论】:

    【解决方案2】:

    这个成功了:

    正如 MateoConLechuga 所说,“]”可能会导致问题。所以我用反斜杠转义了“[”和“]”,这意味着它们只是“字符”。

    这个链接Right way to escape backslash [ \ ] in PHP regex?帮助我匹配反斜杠我必须写三(或四)次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2016-04-15
      • 2020-10-28
      • 1970-01-01
      • 2015-03-15
      • 2013-05-15
      相关资源
      最近更新 更多