【问题标题】:Regex for No more than 2 consecutive numbers No more than 2 repeated characters?不超过 2 个连续数字的正则表达式不超过 2 个重复字符?
【发布时间】:2017-09-04 05:31:35
【问题描述】:

我希望创建一个带有条件的正则表达式:

  • 最小长度 6
  • 必须至少使用一个数字和一个字母
  • 不超过 2 个连续数字(如 123)
  • 重复字符不超过 2 个

我能做到什么

/^(?!.*([A-Za-z0-9!@#$&()\\-`.+,/?"])\1{2})(?=.*[a-z])(?=.*\d)[A-Za-z0-9!@#$&()\\-`.+,/?"]+$/

这将验证字符串是否至少包含一个数字和一个字母。 它检查的不是连续数字 123,而是 111。我无法在其中添加第 4 个条件。

任何进一步的帮助将不胜感激。 提前致谢。

【问题讨论】:

  • What I am able to achieve - 而且,这实现了什么......据我所知,所实现的只是At least one number and one letter must be used(如果你的意思是彼此相邻,也许No more than 2 repeated characters) - 老实说,单独的 RegExp 可能无济于事 - 它必须是 RegExp 答案吗?
  • 负前瞻在这里可能证明是有用的,但是密码正则表达式是一个问题,它已经在 Stack Overflow 上得到了很好的解决。你自己做过研究吗?
  • 我已对问题进行了编辑以使其更加清晰。建议是否需要添加其他内容。
  • @TimBiegeleisen 我确实查看了已经回答的问题,并想出了我在问题中添加的内容。
  • 添加一些有效和无效的输入值

标签: javascript regex


【解决方案1】:

试试这个正则表达式:

^(?=[\D]*\d)(?=[^a-zA-Z]*[a-zA-Z])(?=.{6,})(?!.*(\d)\1{2})(?!.*([a-zA-Z])(?:.*?\2){2,}).*$

Demo

说明:

  • ^ - 字符串的开头
  • (?=[\D]*\d) - 正向前瞻 - 检查数字是否存在
  • (?=[^a-zA-Z]*[a-zA-Z]) - 正向前瞻 - 检查是否存在字母
  • (?=.{6,}) - 积极的前瞻 - 检查是否存在至少 6 个文字
  • (?!.*(\d)\1{2}) - 负前瞻 - 检查 3 个连续数字的缺失。不过,它将允许 2 个连续的数字。如果您甚至不想要 2 个连续数字,请从此部分中删除 {2}
  • (?!.*([a-zA-Z])(?:.*?\2){2,}) - 负前瞻 - 验证字符串中的字母不应超过 2 次​​li>
  • .* - 捕获字符串
  • $ - 字符串结束

输出:

jj112233         -Matches as it has atleast one letter, digit. Not more than 2 consecutive digits/letter. Has atleast 6 characters
jkhsfsndbf8uwwe  -matches 
a1234            -does not match as length<6 
nsds312          -matches
111aaa222        -does not match as it has more than 2 consecutive digits and also more than 2 repeated letters 
aa11bbsd         -match
hgshsadh12       -does not match as it has more than 2 `h`
hh8uqweuu        -does not match as it has more than 2 `u`

【讨论】:

  • 感谢您的回复,但这未能捕捉到“不超过 2 个重复字符”。例如。 "aa1aa1aa" 'a' 不应重复超过 2 次,但此处重复 6 次。
  • @AmanGupta 我已经更新了答案。我现在也添加了第四个条件。字符串中的任何字母都不会重复超过 2 次。
  • 正确匹配“不超过 2 个重复字符”。虽然我还需要添加不允许连续数字(如 123、456)的条件。
  • 为了匹配我这样做:/(?!.*012)(?!.*123)(?!.*234)(?!.*345)(?!.* 456)(?!.*567)(?!.*678)(?!.*789)(?!.*987)(?!.*876)(?!.*765)(?!.*654 )(?!.*543)(?!.*432)(?!.*321)(?!.*210)(?!.*(.)\1{2,})(?!(^\ D+$))(?!(^\d+$))(^.{6,}$)/
  • 感谢您的努力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-12
  • 2018-09-10
相关资源
最近更新 更多