2015-10-16 87 views
0

我有一個JavaScript正則表達式來僅允許字母,數字,空格,_, - 在一個輸入:允許的在JavaScript

var re = /^([a-zA-Z0-9 _-]+)$/; 
if (!re.test(form.titulo.value)) { 
    alert("Error: Input contains invalid characters!"); 
    form.titulo.focus(); 
    return false; 
} 

的問題是,我想允許「太。所以,我可以輸入類似:安娜的房子,不要......我嘗試只是在正則表達式添加「,但沒有奏效:

/^([a-zA-Z0-9 _-']+)$/ 

回答

5

這是因爲在字符類連字符表示一個範圍,除非它在最後(它顯然不能是一個範圍)或者是逃脫的。您也可以刪除捕獲組,因爲在您的情況下它不是必需的。

  1. 逃逸-

    /^[a-zA-Z0-9 _\-']+$/ 
    
  2. 移動-在類

    /^[a-zA-Z0-9 _'-]+$/ 
    

演示

的開始或結束

input { 
 
    color: green; 
 
} 
 
input:invalid { 
 
    color: red; 
 
}
<input type="text" pattern="[a-zA-Z0-9 _\-']+" />

+0

謝謝朋友!我會嘗試 ! –

+0

@RickJoe我已經添加了演示,你可以嘗試在它 – Tushar

5

使用

/^([a-zA-Z0-9 _'-]+)$/ 

-是不是在括號中的第一個或最後一個字符,這意味着你要選擇的字符範圍的,當你不喜歡a-z0-9 。當您編寫_-'時,它表示_'之間的所有字符。

您也可以跳過-以避免其具有特殊含義。

/^([a-zA-Z0-9 _\-']+)$/ 

順便說一句,你可以使用\w作爲一個縮寫a-zA-Z0-9_,讓你的正則表達式可以簡化爲:

/^[\w \-']+$/ 
+0

在簡化的正則表達式中,你錯過了空間 – Tushar

+0

Thx,沒有注意到 – Barmar