2017-05-25 61 views
1

我有一个名称字段的文本框,我用asp验证了正确的名称格式。我想验证字符串之间的多个空格。我怎样才能做到这一点?前导和尾部空格被trim()函数删除,但是如何验证字符串之间的多个空格?像asp验证字符串之间的多个空格

multiple spaces 

no space 

我的验证码::

<label> 
    <span>Full name</span> 
    <input type="text" id="txt_name" runat="server" required="required"/>  
    <asp:RegularExpressionValidator ID="rev_txt_name" runat="server" ControlToValidate="txt_name" ForeColor="Red" 
    ErrorMessage="Invalid name!" SetFocusOnError="True" ValidationExpression="^[a-zA-Z'.\s]{2,50}"></asp:RegularExpressionValidator> 

</label> 
+1

你需要将整个字符串限制为50个字符吗?你的意思是''一二三''是有效的和'“一个两个三个”不是? –

+0

是的,但字符数是可选的。谢谢! – user4221591

+1

那么,如果它是可选的,你可以使用'^ [a-zA-Z'。] +(?:\ s [a-zA-Z'。] +)* $'。如果没有,'^(?=。{2,50} $)[a-zA-Z'。] +(?:\ s [a-zA-Z'。] +)* $'。 –

回答

1

您正在使用的模式允许字符串和任何事件,连续或不内的任何地方配套的空白,因为它是一个比较通用的字符类的一部分。你需要使用一个分组和相应量化它:

^(?=.{2,50}$)[a-zA-Z'.]+(?:\s[a-zA-Z'.]+)*$ 

注意,(?=.{2,50}$)先行要求全行要2到50个字符长。

查看regex demo

详细

  • ^ - 串的开始
  • (?=.{2,50}$) - 正先行需要比换行到字符串的末尾以外的任何2至50个字符
  • [a-zA-Z'.]+ - 1 +字母,单引号或点号
  • (?: - 非捕获组启动:
    • \s - 1空白
    • [a-zA-Z'.]+ - 1+字母,单引号或点字符
  • )* - 零个或多个(*)出现
  • $ - 串的端
+0

谢谢你的好解释。您的描述将有助于他人在未来了解正则表达式。谢谢!!! – user4221591