^[a-zA-Z0-9]*[a-zA-Z0-9 _][a-zA-Z0-9]{2,24}$
这就是我现在所拥有的。
我想先要求一个字母数字;允许使用字母数字、下划线、连字符、句点和空格;要求它以字母数字结尾。但我只想允许多达 3 个这些特殊字符。
我主要对如何限制特殊字符的数量感到困惑。
你也可以使用这个正则表达式:
/^(?!(?:[a-z\d]*[_. -]){4})[a-z\d][\w. -]{0,22}[a-z\d]$/i
前瞻(?!(?:[a-z\d]*[_. -]){4})
是检查出现的无效字符少于 4 次。如果有 4 个或更多,则负前瞻内的模式将匹配,并使前瞻失败。
由于字符串必须以字母数字开头和结尾,并且长度至少为 2,因此可以指定[a-z\d]
为字符串的开头和结尾。中间的其余字符可以包含[a-zA-Z0-9_. -]
重复 0 到 22 次中的任何一个,因为 2 个字符已经用于开始结束的字母数字。
好的,这应该是最后一次编辑:没有考虑总字符数限制。添加了前瞻(假设您的正则表达式支持它)。
可能有比这更好的方法,但它不会来找我(也许使用前瞻)。这是我能想到的:
^(?=^.{2,24}$)[a-zA-Z0-9]+([a-zA-Z0-9]*[_\-. ]){0,3}[a-zA-Z0-9]+$
它不是太漂亮,但它应该工作。
^[a-zA-Z0-9]+[ _.-]?[a-zA-Z0-9]*[ _.-]?[a-zA-Z0-9]*[ _.-]?[a-zA-Z0-9]+$
可能有更好的方法来做到这一点,但我认为你可以让无效字符是可选的,最多出现 3 次,而其他有效字符在它们之间出现 0 次或更多次