使用BootstrapValidator匹配正则表达式字符串中的双空格

时间:2014-09-18 08:16:29

标签: regex twitter-bootstrap-3

我正在使用http://bootstrapvalidator.com/validators/regexp/,我想验证一个名字(不是一个人)。名称必须仅包含字母,数字和一个或多个单个空格(不在开头或结尾)。最小长度为3个字符。我有这个正则表达式:

^[^\s][a-zA-Z0-9\s!]{3,}[^\s]$

我的PHP代码:

echo "<input class='form-control' type='text' name='fullname'";
echo "required";
echo "data-bv-regexp='true'";
echo "data-bv-regexp-regexp='^[^\s][a-zA-Z0-9\s!]{3,}[^\s]$'";
echo "data-bv-regexp-message='Your current input is not valid' />";

我的文字示例(下划线是空格):

Name应该验证确定。

My___Name应该失败。

_My_Name_应该失败。

My_Name_Is_OK应该验证确定。

我的问题:

1)如何避免文本中间的双/多空格?

2)为什么我需要键入5个字符才能验证确定?我当然可以将其更改为{1},然后它将验证确定,但这对我来说是不合逻辑的(如果我只想要1个字符验证确定怎么办?)

1 个答案:

答案 0 :(得分:2)

您可能不希望在正则表达式的开头/结尾使用[^\s]因为它匹配任何非空白字符,而不仅仅是[a-zA-Z0-9](为什么顺便说一句,你的角色类中是否有!?)。注意:\S相当于[^\s]

我还怀疑你不想允许制表符,换行符,换页符和其他空格字符(\s包含),所以请改用空格字符。

然后,您的正则表达式目前至少需要5个字符,而不是3个字符 - [^\s]匹配一个,[a-zA-Z0-9\s!]{3,}匹配三个或更多,[^\s]匹配一个。

为避免双倍空格,您可以使用negative lookahead assertion

^(?!.* {2})[a-zA-Z0-9][a-zA-Z0-9 ]+[a-zA-Z0-9]$

应该做你需要的。

<强>解释

^              # Start of string
(?!.*[ ]{2})   # Assert that there are no two consecutive spaces
[a-zA-Z0-9]    # Match one alphanumeric character
[a-zA-Z0-9 ]+  # Match one or more alphanumeric characters or spaces
[a-zA-Z0-9]    # Match one alphanumeric character
$              # End of string

测试live on regex101.com