【问题标题】:Regex for allow only chars, digits with no repeating chars with length正则表达式只允许字符,没有重复字符的数字和长度
【发布时间】:2021-10-24 08:05:55
【问题描述】:

我想创建一个满足以下要求的正则表达式。

  1. 允许 a-z 和 A-Z。
  2. 允许 0-9。
  3. 没有特殊字符,没有空格。
  4. 不允许使用 2 个重复字符。
  5. 长度应在 6-9 之间。

这里有一些例子

abcdef - 允许

abc456 - 允许

Abc685 - 允许

aabc123 - 不允许,因为 2 aa

sdf112 - 不允许,因为 2 11

aerwet2345 - 不允许,因为长度 > 9

^(?:([a-zA-Z0-9])(?!.\1))$

我已经尝试过这个正则表达式,但似乎重复 2 个字符不起作用。

【问题讨论】:

  • a-z and A-Z allowedno capital letters is allowed 冲突;你有什么尝试过,什么没有特别有效?
  • 请不要在 cmets 中添加代码,请通过editing您现有的帖子将这些详细信息添加到您的帖子中。
  • 这个问题后来更新了额外的数据和模式,我投票重新打开它。

标签: regex


【解决方案1】:

您的模式^(?:([a-zA-Z0-9])(?!.\1))$ 仅匹配单个字符与([a-zA-Z0-9]),因此断言没有任何意义。

断言(?!.\1) 检查单个捕获的值是否直接后跟任何字符,除了换行符和对组 1 的反向引用,并且由于.\1 匹配反向引用之前的单个字符,它不保证 2相同的重复字符


您可以从字符类中断言不是 2 个相同的字符,然后匹配 6-9 个字符。

^(?![a-zA-Z0-9]*([a-zA-Z0-9])\1)[a-zA-Z0-9]{6,9}$

Regex demo

【讨论】:

    【解决方案2】:

    试试这个:

    \b(?:([a-zA-Z0-9])(?!\1)){6,9}\b

    使用[a-zA-Z0-9] 已经确保不包含特殊字符,因此您不需要在否定前瞻中使用.。此外,在非捕获组 (?:) 上使用 {6,9} 会将结果限制为具有 6、7、8 或 9 个字符的结果。

    如果您的“单词”从每行的开头开始,并且每一行的“单词”后面没有任何内容,您可以/应该使用 ^$ 代替单词 boundaries \b,如你在你的例子中做了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多