4

我有以下正则表达式:

^[a-zA-Z0-9]+( [a-zA-Z0-9]+)*$

我正在尝试验证 0-10 个字符之间的字符串,该字符串不能连续包含两个空格或不能为空。该字符串不能包含任何特殊字符,并且可以不区分大小写,并且可以包含连字符。

如何将输入限制在 0-10 个字符之间?

我试过了

^[a-zA-Z0-9]+( [a-zA-Z0-9]+{0,10})*$

但它不起作用。

4

3 回答 3

8

我会这样做:

^(?!.*  )(?=.*[\w-])[\w -]{1,10}$

这使用负前瞻(?!.* )来断言没有两个连续的空格,并使用正前瞻(?=.*[\w-])来断言它至少有一个非空格字符(我假设“空”表示“只有空格”)。

注意,如果不能为“空”,就不能是零长度,所以长度范围必须是1-10,而不是0-10。

值得注意的是,如果它是第一个或最后一个字符,您不需要在字符类中转义破折号。

于 2013-07-25T10:33:03.423 回答
2
(?i)([a-z?0-9?\-?]\s?){0,10}

Case insensitive, between 0-10 length, matches any combination of letters, numbers, hyphens and single spaces.

于 2013-07-25T10:02:01.520 回答
-1

I think no "+" when using range.

^[a-zA-Z0-9]+( [a-zA-Z0-9]{0,10})*$

Also, you say you accept hyphens, but don't see that here?

So

^[a-zA-Z0-9]+( [a-zA-Z0-9\-]{0,10})*$
于 2013-07-25T09:55:07.547 回答