在字符串末尾找到两个相同的字符的正则表达式。

3

我需要找到一个符合以下规则的正则表达式:

  • 包含8到20个字符(大写或普通)。
  • 不包含任何空格字符。
  • 不能以数字(0-9)或下划线(_)开头。
  • 在字符串末尾必须有2个相同的字符。
  • 必须至少包含1个数字。

OK:

+234567899
a_1de*Gg
xy1Me*__
!41deF_hij2lMnopq3ss
C234567890123$^67800
*5555555
sDF564zer""
!!!!!!!!!4!!!!!!!!!!
abcdefghijklmnopq9ss

不正确:

字符数少于8个或超过20个:

a_1+Eff
B41def_hIJ2lmnopq3stt
abCDefghijklmnopqrss5

有空格字符:

A_4 e*gg

以数字或下划线开头:
__1+Eff
841DEf_hij2lmnopq3stt

以两个不同字符结尾:

a_1+eFg
b41DEf_hij2lmnopq3st

不包含数字:

abCDefghijklmnopqrss
abcdef+++dF
!!!!!!!!!!!!!!!!!!!!

到目前为止,我拥有这个。

((?m:[^0-9_]^(?=.*[0-9])\S{8,20}$))

但是我似乎无法弄清楚末尾的两个相同字符是什么?
2个回答

9
以下正则表达式适用于大多数正则表达式引擎,如PCRE、Python、PHP和JavaScript:
/^(?=\S{8,20}$)(?=\D*\d)(?![0-9_]).{6,18}?(.)\1$/i

单元测试演示,可针对您的样例进行测试

解释:

  • / 分隔符
  • ^ 字符串开始
  • (?=\S{8,20}$) 后面跟着8-20个非空格字符
  • (?=\D*\d) 包含一个数字
  • (?![0-9_]) 不能以数字或下划线开头
  • .{6,18}? 非贪心匹配(从字符串开始向末尾移动)
  • (.)\1 匹配任何字符,后跟相同的字符
  • $ 字符串结尾
  • / 分隔符
  • i 标志:不区分大小写(必须使用才能看到例如将 Gg 视为相同字符两次)

谢谢你的回答。它必须是一个.NET正则表达式,但我会绕过它的限制。Niels - NiElS

1
以下这个应该符合您的需求:
^(?=.*\d)[\D\S]\S{5,17}(\S)\1$

Regular expression visualization

通过 Debuggex 进行可视化

regex101 上的演示


这个失败了,它会匹配例如5bCDefghijklmnopqrss - elixenide

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接