2017-08-12 77 views
3

我在Java中,以下的正则表达式,用于与用户名匹配:正则表达式不尊重长度限制

^(?!.*\\..*\\..*)[A-Za-z]([A-Za-z0-9.]*[A-Za-z0-9]){8,15}$ 

我希望这个正则表达式匹配包含所有字母数字字符串(开头字母)与允许在中间和大小至多一个周期(点)8和15

因此之间,它有两个问题:

  1. 它不接受长度8的字符串它接受串与迷你妈妈的长度为9.
  2. 长度没有上限。它匹配任何长度超过8个字符的字符串。

为什么不考虑{8,15}

+0

请举几个例子来接受 –

+1

你应该将其添加为一个答案@bobblebubble –

回答

1

第1期:您正在对至少需要一个[A-Za-z0-9]的组进行量化,并且之前使用了至少一个[A-Za-z0-9.]。因此已经需要至少8个字符。加上你的正则表达式在这个构造之前需要一个[A-Za-z] =至少9个字符。

问题2:你是量化包含[A-Za-z0-9.]*任何金额一组,将该{8,15}因此,上限是15倍(任何金额)=∞

猜你会之后类似于此的正则表达式之一:

^(?![^.]*\\.[^.]*\\.)[A-Za-z](?:\\.?[A-Za-z0-9]){7,14}$ 

See demo and more explanation at regex101