2011-12-16 60 views
7

我不是一個正則表達式的專家,但試圖與我的手驗證允許字母數字數據與空格但沒有任何其他特殊字符的字段。凡linkTitle是可變的,以測試我在有條件的JavaScript的正則表達式來驗證字母數字文本的空格,並拒絕特殊字符

/[^A-Za-z\d\s]/.test(linkTitle) 
/[^A-Za-z0-9\s]/.test(linkTitle) 
/[^A-Za-z\d ]/.test(linkTitle) 

試着用下面的正則表達式的名稱,沒有這些工作......我很好奇,想知道使用\ S出了什麼毛病正則表達式這似乎指的是空白,以及適合該法案的恰當正則表達式。

在此先感謝!

+0

當你說'spaces`你的意思是'「‘'字,或做你的意思是包括所有的其他空間字符像`’\ F」,「\ t'`等? – zzzzBov 2011-12-16 15:22:32

+0

你的通過失敗條件是什麼?寫一個簡單的單元測試。 – zzzzBov 2011-12-16 15:23:41

+0

讓我們假設目前像\ t \ v \ f這樣的空格是可接受的 – optimusprime619 2011-12-16 15:25:09

回答

17

我想你想匹配字符串一次的開頭,然後使用Positive Closure--一個或多個字母,空格或數字,然後使用字符串的結尾。

/^[A-Za-z\d\s]+$/.test(linkTitle) 

測試了:

var reg = /^[A-Za-z\d\s]+$/; 
["Adam", "Ada m", "A1dam", "A!dam", 'sdasd 213123&*&*&'].forEach(function (str) { 
    console.log(reg.test(str + "\n")); 
}); 

顯示truetruetruefalsefalse


或者,如果你想允許空字符串,你可以使用相同的正則表達式,但與Kleene Closure零個或多個字母,數字或空格

var regAllowEmpty = /^[A-Za-z\d\s]*$/; 
["", "Adam", "Ada m", "A1dam", "A!dam", 'sdasd 213123&*&*&'].forEach(function (str) { 
    console.log(regAllowEmpty.test(str + "\n")); 
}); 

注意forEach將無法​​正常工作在舊的瀏覽器 - 這是隻是爲了測試

1

任何你的三個正則表達式,這裏將匹配任何單個字符一個[]之間不計,當然^

該問題可能來自您解釋test()提供的結果的方式。這裏如果正則表達式匹配字符串linkTitle,並且test返回true;這意味着您在輸入中輸入了錯誤的字符(既不是大寫字母,也不是小寫字母,也不是數字,也不是空格)。

完成測試regexs:

/[^A-Za-z\d\s]/.test('0 '); // no match, false, input is ok 
/[^A-Za-z\d\s]/.test('0 $'); // match, true, input is wrong 
相關問題