1
^[a-zA-Z0-9]*[a-zA-Z0-9 _][a-zA-Z0-9]{2,24}$

这就是我现在所拥有的。

我想先要求一个字母数字;允许使用字母数字、下划线、连字符、句点和空格;要求它以字母数字结尾。但我只想允许多达 3 个这些特殊字符。

我主要对如何限制特殊字符的数量感到困惑。

4

3 回答 3

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 个字符已经用于开始结束的字母数字。

于 2013-02-01T15:28:10.857 回答
1

好的,这应该是最后一次编辑:没有考虑总字符数限制。添加了前瞻(假设您的正则表达式支持它)。

可能有比这更好的方法,但它不会来找我(也许使用前瞻)。这是我能想到的:

^(?=^.{2,24}$)[a-zA-Z0-9]+([a-zA-Z0-9]*[_\-. ]){0,3}[a-zA-Z0-9]+$

它不是太漂亮,但它应该工作。

于 2013-02-01T15:07:08.717 回答
0
^[a-zA-Z0-9]+[ _.-]?[a-zA-Z0-9]*[ _.-]?[a-zA-Z0-9]*[ _.-]?[a-zA-Z0-9]+$

可能有更好的方法来做到这一点,但我认为你可以让无效字符是可选的,最多出现 3 次,而其他有效字符在它们之间出现 0 次或更多次

于 2013-02-01T15:36:49.470 回答