【问题标题】:Regex: How to create a pattern to match at least one lower case char, upper case char, digit, and at least one char between [$@#&!] [duplicate]正则表达式:如何创建一个模式以匹配至少一个小写字符、大写字符、数字和至少一个字符 [$@#&!] [重复]
【发布时间】:2018-11-07 10:13:16
【问题描述】:

这些是我需要满足的一组标准:

  • 小写 [a - z] -> 25% 之间至少有 1 个字母

  • 大写 [A - Z] 之间至少有 1 个字母 -> 25% 

  • 至少 1 个介于 [ 0 - 9 ] -> 25% 之间的数字

  • 至少 1 个字符来自 [ $@#&! ] -> 25% 

  • 密码最小长度为6,密码最大长度为12

这是我用来尝试满足这些标准的模式。

我还没有掌握正则表达式的工作原理。

我还没有想出如何设置模式来检查第四个条件 [$@#&!]。

   <input type="password" name="password" placeholder="enter your password" 
`pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[$@#&!]).{6,12}"required>

所以我需要一些帮助。

【问题讨论】:

  • @Welbog 好的,我可以使用 JavaScript 来实现这一点。我已经在 J​​avaScript 中解决了这个挑战。但我想了解如何使用 HTML 5 中的模式属性来实现这一点。
  • 您是否尝试将(?=.*[$@#&amp;!]) 添加到您的前瞻列表中?
  • @Welbog 我现在已经添加了。问题是我读到 * 表示 0 或更多而不是 1 或更多。因此,如果我在整个正则表达式中用 + 替换它会更准确吗?
  • pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[$@#&amp;!]).{6,12}" 模式是您应该根据您的要求使用的模式。如果您有问题的答案,您希望得到什么答案?

标签: regex html


【解决方案1】:

使用正则表达式:

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

注意: 取决于您使用的语法和/或编程语言,某些特殊字符可能需要使用\ 前缀进行转义。

【讨论】:

  • 最后的美元符号是什么意思。
  • 我尝试使用 (?=.*[0-9])(?=.*[$@#&!])。{6,12}
  • 它奏效了。所以这就是为什么我想知道“^”和“$”在模式前后的作用。
  • 在我现在测试的模式中,它和你的唯一区别是“^”和“$”。这就是我想说的。
  • $ 表示字符串的结尾。如果你不在我指定的地方使用它,你就不会强制执行最大长度。 (您将获得子字符串匹配项。) ^.{1,3} 将匹配“aaaaaa”,但 ^.{1,3}$ 不会。 ^ 表示字符串的开头。
猜你喜欢
  • 1970-01-01
  • 2022-11-24
  • 2013-05-29
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 2011-08-26
相关资源
最近更新 更多