验证字母数字字符串长度的正则表达式

4
我可以帮你翻译成中文。以下是需要翻译的内容:

我有以下正则表达式:

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

我想要验证一个长度在0-10个字符之间的字符串,该字符串不能包含两个或以上连续的空格,也不能是空字符串。该字符串不可以包含任何特殊字符,大小写不敏感,可以包含连字符。

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

我尝试了

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

但它不起作用。


如果(str.Length > 10)? - dtb
2
不要试图使用一个正则表达式来完成所有任务,这很可能会让你崩溃。对于长度,你可以使用.NET框架提供的.length属性。我建议您使用多个正则表达式来执行较小、更简单的任务。 - npinti
3个回答

8
我会这样做:
^(?!.*  )(?=.*[\w-])[\w -]{1,10}$

这里使用了负向前瞻(?!.* )确保没有两个连续的空格,正向前瞻(?=.*[\w-])则要求至少有一个非空格字符(我假设“空”意味着“只有空格”)。
请注意,如果它不能是“空”,那么它不能为零长度,所以长度范围必须是1到10,而不是0到10。
小细节是,如果字符类中的破折号是第一个或最后一个字符,则无需对其进行转义。

由于控件上已经有必填字段验证器,因此可以考虑删除空值检查。 - dtsg
好的,但问题确实要求使用正则表达式断言至少有一个非空格字符。以防后来的其他人使用此答案时,他们可能没有那个额外的检查层。 - Bohemian
是的,这是我的错。添加\w是否允许使用拉丁或带重音的字符? - dtsg
\w 包括所有的“字母”、“数字”和下划线字符。 “字母”指的是任何Unicode“字母”(包括重音符号、希腊字母、阿拉伯字母等)。 “数字”也包括阿拉伯数字和中文“数字”。 - Bohemian
非常好。最终使用:^(?i)(?!.* )(?=.*[a-z0-9-])[\wa-z0-9 -]{1,10}$ - dtsg
\w 包括 a-zA-Z0-9。我已经更新了答案。现在它更简单了。希望它仍然适用于您。 - Bohemian

2
(?i)([a-z?0-9?\-?]\s?){0,10}

不区分大小写,长度在0-10之间,匹配任何字母、数字、连字符和单个空格的组合。


1
这个匹配双空格。 - It'sNotALie.
如上所述,这匹配双空格。不过还差一点:(?i)\w([a-z?0-9?\-?]\s?){0,10} 添加了 \w 来处理重音字符 é,因为我认为这些是允许的。 - dtsg
你确定这匹配双空格吗?我在几个测试工具中测试了一下,它不会匹配超过一个空格。你想要测试工具的链接吗? - Srb1313711
@Srb1313711 请尝试 test test - It'sNotALie.
如果你还是感到困惑,可以尝试使用这个测试工具http://gskinner.com/RegExr/,并使用我提供的正则表达式进行测试。如果有多个空格,它将停止匹配,这难道不是你想要的吗? - Srb1313711
显示剩余2条评论

-1

我认为在使用range时不需要加“+”。

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

另外,您说您接受连字符,但这里没有看到?

所以

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

这个匹配一个字符串 AAA AAA。输入不能包含超过两个连续的空格。 - dtsg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接