2016-07-26 108 views
0

我正在嘗試使用jquery對文本框值進行驗證,以確保文本框只接受字母數字值。我也試圖在單詞之間留出空格。我不想讓空格在文本框中的句子的左側和右側。我怎樣才能允許文本框中的文字中間的空格?Jquery允許在字母數字驗證中使用空格

My trails fiddle

$('#dsTest').keyup(function() { 
    if (this.value.match(/[^a-zA-Z0-9]/g)) { 
    this.value = this.value.replace(/[^a-zA-Z0-9]/g, ''); 
    } 
}); 
+0

根據@ S-McCrohan提出的觀點,理解爲什麼檢查是在keyup上完成會有幫助。 – lps

回答

1

你不會是能夠做到這一點優雅地只使用keyup,由於同時還在鍵入句子的過程中,你剛剛輸入的空間(有意它是在中間)在最後。

相反,我會做這樣的事情:

$('#dsTest').keyup(function() { 
    if (this.value.match(/[^a-zA-Z0-9 ]/g)) { 
    this.value = this.value.replace(/[^a-zA-Z0-9 ]/g, ''); 
    } 
}); 

$('#dsTest').focusout(function() { 
    this.value = this.value.trim(); 
}); 

允許同時打字過程中需要鍵入空格,並在一些合理稍後剝離與String.trim()的開頭和結尾的空格。在我的例子中,我使用了.focusout(),但您也可以在消耗該值時進行修剪。

這是一個更廣泛類別的驗證問題的例子,其中輸入測試WHILE輸入可以防止用戶輸入一個完成後合法的值 - 因爲一次輸入一個字符的值需要該值暫時具有無效狀態。有處理這一問題的方式主要有兩種:

  • 不要測試驗證,直到用戶完成輸入值,而
  • 標誌無效值不是改變他們

您還可以結合例如,這兩個字段在用戶鍵入時突出顯示該字段,以顯示當前值是無效的,然後修復該值使其在離開字段時仍然有效,而無效值仍然存在。

+0

是否有任何選項允許單詞之間的空格? – Kurkula

+0

我修改了現有的正則表達式以允許在文本字段中使用空格。在每次關鍵字測試之後,允許在單詞之間使用空格的問題是,它不可能知道您剛鍵入的空間是否要在其後面(並且被允許)還有另一個單詞,或者如果完成了(並且它是應該刪除的終端空間)。 –

1

在純正規表達式中,這應該工作/^[a-zA-Z0-9]+[a-zA-Z0-9\s]*[a-zA-Z0-9]+$/g。請注意,這將需要至少2個字符的值。如果你想讓它成爲空白,那麼你可以做/^([a-zA-Z0-9]+[a-zA-Z0-9\s]*[a-zA-Z0-9]+|)$/

綜上所述,如其他答案所述,修正該值的可用性明智性更好,因爲如果用戶不小心添加了前導空間或尾隨空間,則不會停止向前移動。

+1

'/ ^([a-zA-Z0-9] + [a-zA-Z0-9 \ s] * [a-zA-Z0-9] + | [a-zA-Z0-9] *)$ /'也允許單個字母數字字符,這使得輸入字段成爲可能。但是,輸入空格仍然是一個問題,除非你稍後回去插入它們。這是一個痛苦。 –

相關問題