regex 不允许所有相同的字符,即使是由单个特殊字符分隔

4smxwvx5  于 2023-04-07  发布在  其他
关注(0)|答案(2)|浏览(107)

尝试为以下条件创建正则表达式,我已经尝试了一个正则表达式,它的工作预期以外的一个条件,因为它不允许重复,甚至由特定的字符分隔。
1.允许字母数字字符,最小12,最大14
1.除&之外不允许有任何特殊字符(只能有一个)
1.不允许所有相同的字符,即使用&分隔
1.长度在12到14之间相同,甚至包括&
例如:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

1111111&11111 not allowed as all are the same characters even & is there

111111111112 allowed 

1111111&11112 allowed

ABC123567GHDG4 allowed
^(\d)(?!\1+$)(?=.{11,13}$)[0-9]*(?:[&][0-9]+)?$

上面的正则表达式除了1111111&11111以外都可以工作
我也试了下面的正则表达式,它的工作条件,因为它不允许相同的字符
但它允许字符串的开头和结尾,而不允许字母

^(?!&?(\d)(?:&?\1)+$)(?=.{12,14}$)\d*(?:&\d*)?$

我们不允许"&"出现在字符串的开头和结尾,它需要允许Captial Alpha characternumerics

ABC123567GHDG4 allowed 

ABC1235&67GHD allowed

ABCDEFGHIJKLR allowed

1254789563254 allowed

125478&563254 allowed

125478556325& not allowed as ends with &

&125478556325 not allowed as starts with &

ABCDEFGHIJKL& not allowed as ends with &

&ABCDEFGHIJKL not allowed as start with &
w8ntj3qf

w8ntj3qf1#

你可以用

^(?=.{12,14}$)(?!([a-zA-Z\d])(?:&?\1)+$)[a-zA-Z\d]+(?:&[a-zA-Z\d]+)?$

参见regex demo

  • 详情 *:
  • ^-字符串的开头
  • (?=.{12,14}$)-字符串的长度必须在12到14个字符之间
  • (?!([a-zA-Z\d])(?:&?\1)+$)-字符串不能有相同的字母数字字符,最终在任何位置用&字符分隔
  • [a-zA-Z\d]+(?:&[a-zA-Z\d]+)?-一个或多个字母数字字符,后跟一个&字符的可选序列,后跟一个或多个字母数字字符
  • $-字符串结束。
9udxz4iz

9udxz4iz2#

你可以试试这个模式:

/^([A-Z0-9])(?!(\1|&)+$)(?=.{11,13}$)[A-Z0-9]*(?:[&][A-Z0-9]+)?$/gm

这是你的模式的修改版本,我只更新了负前瞻部分为(?!(\1|&)+$)(不允许第一个字母或'&'字母重复)。
参见演示here

相关问题