正则表达式在第一个位置或最后一个位置不能包含数字,且长度必须为6-20个字符

时间:2016-04-09 16:11:36

标签: regex xml

早上好。 我的正则表达式不能满足我的需要。我不能以数字开头或结尾。我必须至少有一个符号,一个大写字母,一个小写字母,当然还有一个在外部"边界之间的数字"我已经描述过了。正则表达式必须至少6个字符长,最多20个字符。 以下是我的正则表达式:

^([^0-9](?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[_!?@#$%])[^0-9]).{6,20}$

我遇到的问题是我似乎无法确定数字边界和长度。

例如,在正则表达式测试中,这是可以接受的,

MaA1?kss1111111

但我不能接受。

但这是可以接受的,

Mk?1wK

我没有起始号码,也没有结束号码。 我将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:2)

你可以调整你的正则表达式:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[_!?@#$%])[^0-9].{4,18}[^0-9]$

它使用.{4,18}(比您的长度要求少2),因为您在正则表达式的开头和结尾都有[^0-9]

RegEx Demo 1

或者(这也是我的首选解决方案)你可以检查{6,20}长度并使用否定前瞻检查开头/结尾是否存在非数字:

^(?![0-9]|.*[0-9]$)(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[_!?@#$%]).{6,20}$

RegEx Demo 2