2013-08-21 138 views
1

編輯:謝謝大家的投入。你回答什麼都對,但我想我沒有解釋清楚。正則表達式只包含

我想在鍵入自己時檢查輸入值。如果用戶輸入的任何其他字符不在列表中,則輸入的字符應該回滾。

(我不關心在輸入完整輸入後檢查)。

      我想驗證這應該只包含字符0-9[digits], -(hyphen) , .(dot),/(forward slash) .Date可能會像22/02/199922.02.199922-02-1999。沒有驗證需要對任何發生或位置做了日期輸入字段。一個簡單的驗證就足以檢查它是否有任何其他字符比上面列出的字符。 [我不擅長正則表達式。]

這是我認爲應該工作,但不是。

var reg = new RegExp('[0-9]./-'); 

這裏是jsfiddle.

+0

您的編輯後:可能重複[是否有可能進入到文本框或使用jQuery的任何輸入欄阻止字符的某個字符或一組?(HTTP:/ /stackoverflow.com/questions/2500620/is-it-possible-to-block-a-certain-character-or-group-of-characters-from-entering) –

+0

但該帖子的答案確實只檢查字符,但不是像./-太... –

+1

是的,好吧,這是由你來提出正確的表達。你現在似乎在問你兩個問題:(1)如何測試一個字符串是否包含某些字符,以及(2)如何防止字符輸入。對於表達式,你會在下面找到答案。其他問題鏈接到問題的副本。 –

回答

6

你只表達測試是否任何地方字符串中,數字後面是任何字符(. is a meta character)和/-。例如,5x/-42%/-foobar將匹配。

相反,你要把所有的字符集character class和測試字符串中的每一個字符是否是其中之一:

var reg = /^[0-9.\/-]+$/ 
  • ^ matches the start of the string
  • [...]比賽如果字符包含在組中(即任何數字,./-)。
    /來轉義,因爲它也表示字面一個正則表達式的結尾。
    -在兩個字符之間描述了範圍的字符(在它們之間,例如0-9a-z)。如果-在開頭或結尾,它雖然沒有特別的意義,並且字面上理解爲連字符。
  • + is a quantifier和表示「一個或更多,如果前面的模式」。這允許我們(連同錨點一起)測試字符串的每個字符是否在字符類中。
  • $字符串的結尾匹配

或者,您可以檢查是否存在是允許者之一任何字符:

var reg = /[^0-9.\/-]/; 

^之初角色類否定它。在這裏,我們不必測試字符串的每個字符,因爲只有字符的存在已經不同,已經使字符串無效。

您可以使用它像這樣:

if (reg.test(str)) { // !reg.test(str) for the first expression 
    // str contains an invalid character 
} 
+0

在你的第二個要點中,你可能想提到'-'需要在字符集的末尾(或開頭),否則它應該被轉義,因爲它在字符之間有特殊的含義 – Ian

2

如果你不關心日期的有效性,你可以方便地使用正則表達式:

^[0-9]{1,2}[./-][0-9]{1,2}[./-][0-9]{4}$ 

的字符類[./-]允許任何方括號內的字符之一和量詞允許1或2位數的月份和日期,而只有4位數字的年份。

您也可以組中的第幾組,像這樣:

^([0-9]{1,2}[./-]){2}[0-9]{4}$ 

更新您的fiddle與第一正則表達式。

3

試試這個:

([0-9]{2}[/\-.]){2}[0-9]{4} 
+1

不要忘記' $'錨,並且如果它在開始或結束時不需要在班級中破折號。而且,你可以使用'\ d'而不是'[0-9]'和非捕獲組。所有這些一起:'^(?:\ d {2} [./-]){2} \ d {4} $' – sp00m