我必须找到符合以下规则的正则表达式。
确定:
+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个相同的字符?
答案 0 :(得分:9)
以下内容适用于大多数正则表达式(PCRE,Python,PHP,JavaScript):
/^(?=\S{8,20}$)(?=\D*\d)(?![0-9_]).{6,18}?(.)\1$/i
Demo with unit tests against your sample cases
说明:
/
分隔符^
字符串开头(?=\S{8,20}$)
后跟8-20个非空格字符(?=\D*\d)
包含数字(?![0-9_])
不能以数字或下划线开头.{6,18}?
非贪婪的字符匹配(从字符串的开头到结尾移动我们)(.)\1
匹配任何字符,然后再次使用相同的字符$
字符串结尾/
分隔符i
flag:不区分大小写(需要查看Gg
,例如,两次相同的字符)答案 1 :(得分:1)