2017-02-08 173 views
1

我目前正試圖限制用戶,使他們只能在文本框中輸入字母或數字,並且如果輸入了除字母或數字之外的任何其他字符,我想刪除該值。限制用戶輸入

所以我的正則表達式看起來像^[a-zA-Z0-9]+$和整個jQuery函數如下所示:

$("#myInputField").keyup(function (e) { 
    if (/^[a-zA-Z0-9]+$/.test(this.value)) { 
     this.value = this.value.replace(/^[a-zA-Z0-9]+$/, ''); 
    } 
}); 

但這似乎反其道而行之。所以如果我輸入一個數字或字母,那麼它會被替換,並允許所有其他字符。有人可以告訴我我要去哪裏嗎?

+0

使用否定字符類''.replace(/ [^ a-zA-Z0-9] +/g,'')' –

+0

是的,當您要查找字母數字時,則會出現相反情況,然後刪除字母數字。我沒有試過這個(所以只是一個評論),但可能:'.replace(/ [^ a-zA-Z0-9]/g /,'');' –

+0

而且測試將會是'if(/ test(this.value))'或'if(!(/^[a-zA-Z0-9] + $ /)。test(this.value)))[^ a-zA-Z0-9] ' –

回答

3

你的正則表達式是目前這樣的:

^[a-zA-Z0-9]+$ 

打破了下來,該字符串的開頭匹配,然後儘可能多的字母數字字符,那麼該字符串的結尾。

實際上你想要匹配的是任何非字母數字字符,而且你不關心字符串的開始或結尾在哪裏。

這樣,隨着評價建議的正則表達式是正確的:

[^a-zA-Z0-9] 

此任何非字母數字字符匹配。

您必須在這兩個更改此測試和替換線。此外,有人可以右鍵單擊並粘貼到文本框中,因此這不是萬無一失的(某人也可以禁用JavaScript)。

+0

感謝這個,粘貼問題可以不只是''('#validate-serial')。bind(「paste」,function(e){e.preventDefault();});'在if條件之後? – Code

+1

你可以嘗試阻止粘貼,但我建議你*不要*。複製+粘貼對電腦來說是不可缺少的,就像後退按鈕一樣(我看過網站打破了後退按鈕)。你可以檢查輸入onChange或onBlur,但是再次*用戶可以禁用JavaScript *,所以你必須**檢查它在服務器端。 –

+1

在服務器端檢查輸入以確保始終是數字/字母 – Code

0

如果您在兩個位置將您的正則表達式更改爲[^a-zA-Z0-9],則可以解決此問題。基本上你的正則表達式幾乎總是正確的,即使它是錯誤的,它也是真實的,因爲別的東西否定它是正確的。我已經用示例代碼添加了一個示例。我也使用控制檯來證明它。

$("#myInputField").keyup(function (e) { 
 
    console.log(/[^a-zA-Z0-9]+$/.test(this.value)); 
 
    if (/[^a-zA-Z0-9]+$/.test(this.value)) { 
 
     this.value = this.value.replace(/[^a-zA-Z0-9]+$/, ''); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" id="myInputField"/>

**在此張貼的時間有一個答案。他們有更好的措辭。我只是提供了一個我工作的例子。

0

如前所述,使用/[^a-zA-Z0-9]+$/來查找任何不符合字母或數字的字符串。

請注意,String.replace函數返回替換字符串。被調用的字符串String.replace未被調整。

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

@Cayceķ感謝您指出的是,其他符號應該被刪除:)

+1

我不相信他們希望它清空..只是被刪除的角色。 –

0

你可以用在兩個地方下面的正則表達式(以你的條件,以及在REPLACE語句)

[^ \ d \ W]

這是否定的集合,匹配這是不是在集合(即除字母數字以外的任何其他)的任何字符哪個。