PCRE正则表达式非连续重复

PCRE Regex non-consecutive repeating

我正在尝试最少 6 个字符,总共最多 15 个字符。第一个必须是字母数字(无特殊),接下来(最多)13 个是字母数字并且可以包括不连续的(并且一次只能包含以下一个)下划线或句点或连字符,然后最后一个字符必须是字母数字。

好的示例:A_3.hj_3J

示例不正确:F__3d66.K

示例不正确:6-_sd.6h9

这就是我目前所拥有的,我觉得它很接近但令人讨厌。 我做错了什么?

^[a-zA-Z0-9]{1}([_.-]?[a-zA-Z0-9])\S{4,13}[a-zA-Z0-9]{1}$

有几个问题:

  1. 您的正则表达式模式还将匹配超过 15 个字符的输入。
  2. 由于使用 \S
  3. ,您的正则表达式还会在中间出现其他不允许的字符,例如 @#

您可以通过使用否定前瞻来禁止 period/hyphen/underscore 的连续出现并从允许任何非 space 字符 [=16= 的正则表达式中间删除 \S 来修复它]

^[a-zA-Z0-9](?!.*[_.-]{2})[\w.-]{4,13}[a-zA-Z0-9]$

RegEx Demo