【问题标题】:JavaScript regular expression returns false, but regex tester returning trueJavaScript 正则表达式返回 false,但正则表达式测试器返回 true
【发布时间】:2017-11-15 02:53:00
【问题描述】:

我有一个 JavaScript 正则表达式,用于在输入字段中验证前端密码。这是我的输入字段的样子:

<input type='password' placeholder='Password...' id='password' pattern='^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,})' required>

该正则表达式正在寻找一个字符串:八个或更长的字符,包括一个大写字母、小写字母、数字和一个特殊字符。让我们来看看字符串:2017 年 11 月!例如。那应该通过正则表达式,但它不在我的 web 应用程序中。当我从输入字段 ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&amp;\*])(?=.{8,}) 复制并粘贴正则表达式并将其放入 regex101.com 时,该字符串通过了验证。但它没有通过我的 webapp 中的验证。是否有特定原因将其放入 pattern 属性会改变它是否会通过验证?

【问题讨论】:

  • 正则表达式不是 100% 标准化的,您确定正则表达式测试器设置为 JavaScript 的正则表达式吗?
  • @Gry- 是的,我在 JavaScript 正则表达式上检查了它
  • pattern 需要匹配完整的字符串。您的模式与完整的字符串不匹配 regex101.com/r/WcqXSR/1 它仅匹配字符串开头的位置。

标签: javascript regex validation


【解决方案1】:

你需要在最后加上.{8,}

^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*]).{8,}

这是因为pattern 必须匹配完整的字符串,而您当前的表达式只匹配字符串的开头。

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 2012-05-31
    • 2018-08-22
    • 2011-12-13
    • 2018-03-14
    • 1970-01-01
    相关资源
    最近更新 更多