如何使用正则表达式匹配单个空格而不仅仅是单个空格

时间:2011-05-28 09:18:55

标签: regex

这是我目前拥有的,这将匹配字母数字字符和空格:

^[a-z0-9\s]+$

我想要做的是确保只有一个空格不会超过一(1)个匹配。以上将匹配“这是一个测试”,但如果输入是“This isatest”或“T hisisatest”,我只希望它匹配。一旦总空间不止一个,它将不再匹配。

理想情况下,如果空间是领先或尾随,它也不匹配,但这只是结冰。

修改 我们的想法是,这将用于在创建帐户时验证帐户名称。帐户名称只能包含拉丁字母,数字和单个空格。但是,它可以是所有字母或所有数字,不需要空格。这绝对是关于空间而不是空白。

5 个答案:

答案 0 :(得分:6)

中间最多允许一个空格。

^[a-zA-Z0-9]+\s?[a-zA-Z0-9]+$

将只允许一个空格

^[a-zA-Z0-9]+\s[a-zA-Z0-9]+$

<强> EDIT1:

以上解决方案不接受单个字符串。

以下解决方案也匹配单字符串

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

答案 1 :(得分:5)

首先通过修剪前导和尾随空格来清除用户名。使用占有量词的正则表达式:

^[a-z0-9]++(?: [a-z0-9]++)?$

答案 2 :(得分:0)

尝试:

^[a-z0-9]+(?: [a-z0-9]+)?$

(编辑:您的后续建议您要检查空格而不是空格)。

答案 3 :(得分:0)

这很简单,只需将其构建成块。

^[a-z0-9]+(?: [a-z0-9]+)?$

一个或多个字母数字,然后是由单个空格和一个或多个字母数字组成的可选组。 (顺便说一下,\s匹配一个空格字符,而不是空格。也就是说,它实际匹配[ \t\n]。你真正想要的是什么?)

答案 4 :(得分:0)

应该就这么简单。匹配文本中间的0或1个空格字符。虽然它也匹配标签。

[a-z0-9]+\s{0,1}[a-z0-9]+