2014-01-05 71 views
4

我需要一個正則表達式來滿足下列要求的中間兩個連續的空格:正則表達式不允許在字符串

  • 只有字母,時間和空白都是允許的。
  • 在字符串的開頭和結尾處沒有空格。
  • 字符串中間的空格是可以的,但不是兩個連續的空格。

匹配:

"Hello world." 
"Hello World. This is ok." 

不匹配:

" Hello World. " 
"Hello world 123." 
"Hello world." 

這個工作在我的情況

<asp:RegularExpressionValidator ID="revDescription" runat="server" 
           ControlToValidate="taDescription" Display="Dynamic" ErrorMessage="Invalid Description." 
           Text="&nbsp" 
           ValidationExpression="^(?i)(?![ ])(?!.*[ ]{2})(?!.*[ ]$)[A-Z. ]{8,20}$"></asp:RegularExpressionValidator> 
+2

嗨,歡迎來到StackOverflow!首先,如果您熟悉編輯器的格式選項,我認爲這將是一個好主意 - 您所述的問題並不真正反映您的要求。這次我會爲你做這個,所以你可以看看它是如何工作的。其次,你沒有真正問過一個問題 - 你陷入了什麼問題?第三,你使用哪種語言?所有這些主題都包含在幫助頁面和正則表達式常見問題解答中。 –

+1

我會毫不猶豫地學習它。謝謝你的幫助:) @Tim Pietzcker –

回答

2

這裏是Python中的解決方案,使用anchorsnegative lookahead assertions確保空白規則是fol低於:

regex = re.compile(
    """^   # Start of string 
    (?![ ])  # Assert no space at the start 
    (?!.*[ ]{2}) # Assert no two spaces in the middle 
    (?!.*[ ]$) # Assert no space at the end 
    [A-Z. ]{8,20} # Match 8-20 ASCII letters, dots or spaces 
    $    # End of string""", 
    re.IGNORECASE | re.VERBOSE) 
+0

我正在使用asp.net用戶控件正則表達式驗證器像這樣。你能指導我嗎?你建議的正則表達式不起作用。 –

+0

@AfnanAhmad:你沒有使正則表達式不區分大小寫。將「(?i)」添加到正則表達式的開頭。 –

+0

謝謝你,我已經完成了它。我做了以下更改。 。我非常感謝你。我已經搜索了很多,但最後你給了我答案。超級:) –

0

我建議檢查正則表達式以外的長度,否則表達式可能會變得太複雜。

下面是在JavaScript的示例片段:

if (str.length < 8 || str.length > 20) 
    return false; 
if (str.match(/(^\s|\s$|\s\s|[^A-Za-z.\s])/)) 
    return false; 

正則表達式檢查匹配的任何禁圖案:

  • ^\s開頭
  • \s$一個空白一個空白在末尾
  • \s\s兩個連續的空白字符
  • [^A-Za-z.\s]一個字符,不能是字母,期間或空白

如果只允許空格(ASCII 32),沒有標籤或其他空白字符,您可以通過字面空格字符全部替換\s

另一解決方案是「正」的表達的組合來檢查所允許的字符和長度和一個「負」一個,以排除被拒絕的模式:

return str.match(/[A-Za-z. ]){8,20}/) && !str.match(/(^ | $| )/); 

更新:如果需要將所有內容放入單個表達式中,恐怕您必須忽略對連續空格的檢查,因爲此限制使語言上下文相關,因此無法通過正則表達式進行檢查。你可以做的是檢查一個以字母開頭的字符串,後跟6到18個字母,點或空格,並以字母結尾:

[A-Z][A-Z. ]{6,18}[A-Z] 
+0

我使用asp.net正則表達式驗證器。我用你的建議改變了我的代碼,但沒有運氣。這是代碼。

+0

我已經離開Miimun值和最大值驗證。我將通過將Maxlength應用於文本框來實現這一點。現在我只想在開始時不允許空白,並且不允許中間有兩個連續的空白空間。不匹配=(Hello world)=(Hello World) –

+0

連續白色空間是主要問題,我用白色空間和結束白色空間這樣做了^ [a-zA-Z] [\。\ s \ a-zA -Z] * [a-zA-Z \。] $我只是不希望用戶輸入conssective空格。 –

相關問題