2014-01-16 30 views
0

我想所有的字母數字數據+ 只有後面的4個特殊字符才允許。jquery中有限特殊字符的正則表達式

' (single quote) 
- (hyphen) 
. (dot) 
single space 

我嘗試這樣做:

var userinput = $(this).val(); 
var pattern = [A-Za-z0-9_~\[email protected]#\$%\^&\*\(\)]+$ 

if(!pattern.test(userinput)) 
{ 
    alert('not a valid'); 
}​ 

,但它無法正常工作。

+1

它以什麼方式不起作用?我希望在「它不應該匹配輸入X時」的範圍內回答「我的電腦在我運行時試圖殺死我」的答案。 – Tibos

+2

您的正則表達式對象('pattern')的語法是錯誤的,因爲是模式本身 - 如果你只想四個特殊字符,爲什麼你有一噸包含有多餘的人嗎? –

+1

您的正則表達式明確允許使用'_','〜','!','@','#','$,''''''','''''''''' )'但根據這個問題,我明白他們不應該匹配......你是從哪裏複製粘貼正則表達式?或者你的問題缺少一些細節? – Vache

回答

2

首先,你需要將字符串括在/將它解釋爲一個正則表達式:

var pattern = /[A-Za-z0-9_~\[email protected]#\$%\^&\*\(\)]+$/; 

然後,你必須刪除一些不允許的字符(即正則表達式比您指定的匹配更多):

var pattern = /^[A-Za-z0-9 '.-]+$/; 

第二個是你需要的。完整代碼:

var userinput = $(this).val(); 
var pattern = /^[A-Za-z0-9 '.-]+$/; 

if(!pattern.test(userinput)) 
{ 
    alert('not a valid'); 
}​ 

此外,請檢查this指向的內容。

+0

你需要逃避那個'.' – CodingIntrigue

+1

@Rraham'''不需要在字符類中轉義。 '/[.]/.test('some string')// false' – Vache

+0

@Vache這是一個JS的東西,還是它適用於任何正則表達式實現? – CodingIntrigue

0

「不工作」對您的問題沒有幫助。

我建議這個正規表示法:

^[a-zA-Z0-9\'\-\. ]+$