2017-05-25 60 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