【问题标题】:RegExs VALIDATION正则表达式验证
【发布时间】:2021-05-07 08:27:06
【问题描述】:

我有两个不同的东西密码和密码。我正在寻找以下两者的 RegEx 格式 -:

密码-:

  1. 1 大写后者
  2. 1 小后者
  3. 1 个特殊字符
  4. 最少 8 位数字
  5. 3次不能重复任何事情。

我已经获得 4 分了

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

但我无法达到第五个。

PIN

 1. 6 digit pin
 2. Only numbers
 3. Can't be use simple pin (111111,222222,...00000 and 123456, 234567 ....654321)

【问题讨论】:

  • 你能添加几个有效和无效的例子吗?
  • 当然@anubhava,密码 -: Anil@123, Patil@123 ... 有效 Anilpatilios@123 无效(“i”在字符串中使用了 3 次) Pin -: 可以使用交替的 6 位数字,任何东西。
  • 你为你的别针试过什么?你也能说出到底什么是不允许的吗?

标签: regex react-native validation passwords


【解决方案1】:

您可以将此正则表达式与额外的负前瞻一起使用,以禁止任何字符出现 3 个或更多重复:

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

RegEx Demo

注意这个额外的负面预测:

(?!.*?(.)(?:.*?\1){2})

如果我们在输入中的任意位置找到 3 个或更多重复字符,则匹配失败。

完整的正则表达式详细信息:

  • ^:开始
  • (?=.*[a-z]): 肯定前瞻断言我们必须有一个小写字母
  • (?=.*[A-Z]): 肯定的前瞻断言我们必须有一个大写字母
  • (?=.*[0-9]):肯定的前瞻断言我们必须有一个数字
  • (?=.*[!@#$%^&*]): 肯定的前瞻断言我们必须有一个特殊字符
  • (?!.*?(.)(?:.*?\1){2}):否定前瞻断言我们不能重复 3 次或更多相同字符
  • .{8,}:匹配 8 个或更多字符
  • $;结束

【讨论】: