【问题标题】:Regular expression not working with \ and ]正则表达式不适用于 \ 和 ]
【发布时间】:2019-08-26 04:24:08
【问题描述】:

我有一个用于验证密码的正则表达式,该密码必须至少为 8 个字符,并且必须包含字母(大写和小写)数字和 set ^ $ * 中的特殊字符。 [ ] { } ( ) ? - " ! @ # % & / \ , >

我面临 2 个问题,在将 / 添加到 reg exp 后,它无法识别(其他字符仍然可以正常工作。如果我添加 /],则表达式不再有效(尽管模式似乎是,但一切都是无效的可以在浏览器调试模式下)。

正则表达式字符串

  static get PASSWORD_VALIDATION_REGEX(): string {
    return '(?=.*[a-z])(?=.*[0-9])(?=.*[A-Z])' +  // contains lowercase number uppercase
      '(?=.*[\-~\$@!%#<>\|\`\\\/\[;:=\+\{\}\.\(\)*^\?&\"\,\'])' + // special 
      '.{8,}'; // more than  allowed char
  }

我将正则表达式用作表单验证器和函数中的匹配项

    password: ['', {validators: [Validators.required,
      Validators.pattern(StringUtils.PASSWORD_VALIDATION_REGEX)
        ],
        updateOn: 'change'
      }
    ]
//....
value.match(StringUtils.PASSWORD_VALIDATION_REGEX)

尝试仅使用 (?=.*[\\]) 作为特殊字符列表,在这种情况下,我收到了控制台错误 Invalid regular expression: /^(?=.*[a-z])(?=.*[0-9])(?=.*[A-Z])(?=.*[\]).{8,}$/: Unterminated character class

对于'(?=.*[\]])',没有控制台错误,但表单验证“模式”中存在以下错误

actualValue: "AsasassasaX000[[][]"
requiredPattern: "^(?=.*[a-z])(?=.*[0-9])(?=.*[A-Z])(?=.*[]]).{8,}$"

https://regex101.com/ 上的相同值和模式失败

提前感谢您的帮助/建议!

【问题讨论】:

  • 您的 ^(?=.*[a-z])(?=.*[0-9])(?=.*[A-Z])(?=.*[]]).{8,}$ 正则表达式 fails 在 regex101。将[]] 替换为\]\\],甚至]
  • 使用return /^(?=.*[a-z])(?=.*[0-9])(?=.*[A-Z])(?=.*[-~$@!%#&lt;&gt;|`\\/[\];:=+{}.()*^?&amp;",']).{8,}$/
  • 在我使用'(?=.*[\]])'的模式中,确实正则表达式失败,传递了php风格(对不起)
  • 但是你说你用的是JS。或者你在 PHP 中使用它?如果您使用的是 JS,为什么要使用 PHP 设置进行测试?
  • 我的建议对你有用吗?

标签: regex angular validation passwords angular7


【解决方案1】:

您已经过度转义了您的模式并且未能正确转义 ] 字符。在 JavaScript 正则表达式中,必须对字符类中的] 进行转义。

如果您对如何在字符串文字中定义转义感到困惑(这确实相当令人困惑),您应该使用正则表达式文字。关于与Validators.pattern 一起使用的正则表达式,要记住的一件事是字符串模式由Angular 框架通过用^$ 包围整个模式来锚定,因此当您将模式定义为正则表达式文字。

使用

static get PASSWORD_VALIDATION_REGEX(): string {
    return /^(?=.*[a-z])(?=.*[0-9])(?=.*[A-Z])(?=.*[-~$@!%#<>|`\\\/[\];:=+{}.()*^?&",']).{8,}$/;
}

注意\] 匹配] 字符和\\ 匹配\ 内部[...]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多