2016-11-20 152 views
0

我有以下jquery強制輸入到輸入框中的字符變成大寫。jQuery限制可以輸入到輸入的字符

jQuery(document).ready(function() { 
    jQuery('.uppercase').keyup(function() 
    { 
     jQuery(this).val(jQuery(this).val().toUpperCase()); 
    }); 
}); 

我想限制輸入,因此,只有英文字母數字字符可以輸入。解決這個問題的最好方法是什麼?

+3

[類似的問題在這裏。(http://stackoverflow.com/questions/895659/how-do-i-block-or-restrict-special-characters-from-input-fields-with-jquery)我相信答案就是你要找的。 – Jackanapes

回答

0

您可以使用regular expression將每個特殊字符替換爲void。

jQuery(document).ready(function() { 
    jQuery('.uppercase').keyup(function() 
    { 
     jQuery(this).val(jQuery(this).val().replace(/[^\w\s]/gi, '').toUpperCase()); 
    }); 
}); 

你正在發送什麼由定期explession指定爲void character('')。

在正則表達式中可以看到關鍵^這意味着,關鍵\ W這意味着字母數字字符\ S這意味着空格字符。所以你要發送一些不是字母數字的東西,這不是空間。

正則表達式內刪除\ S如果你dont't要允許在你的領域空間。

PS。這並不妨礙用戶提交特殊字符,你必須檢查服務器端。

等效 - 但清潔劑 - 正則表達式可以是:

/\W/gi 

您可以查看上面的鏈接,看看這是否意味着

+0

這是非常密集的代碼。如果你簡要描述了那裏發生的事情,這將會很有幫助。 – Ouroborus

+0

您正在將常規放棄指定的內容替換爲無效字符('')。 在正則表達式中,您可以看到*^*鍵,它表示* not *,鍵* \ w *表示*字母數字字符*和* \ s *,表示空格。 所以你發送的是不是字母的那些東西,那不是空間。 如果你想消除你的領域的空間,刪除\ s。 PS。這不妨礙用戶提交特殊字符,你必須檢查服務器端 –

0

一個非常簡單的方法,做你想做的,就是趕上​​事件,然後檢查關鍵的ASCII碼。如果不是('0' ASCII0x30之間0x39ASCII '9'),它不是0x41ASCII 'A')和0x7aASCII 'Z')之間,那麼你只致電event.preventDefault取消該活動。您還可以防止用戶通過輸入小寫字符,如果你改變從低'z'0x7a)到上'Z'0x5a)最後ASCII檢查。你也可以有CSS text-transform: uppercase;,這樣用戶就不會看到低位轉換和高位轉換之間的轉換。

jQuery('#test').on('keydown', function(e) { 
 
    var charCode = e.key.charCodeAt(0); 
 
    if (!((charCode >= 0x30 && charCode <= 0x39) || (charCode >= 0x41 && charCode <= 0x7a))) { 
 
     e.preventDefault(); 
 
    } 
 
}); 
 

 
jQuery('#test').on('keyup', function(e) { 
 
    jQuery(this).val(jQuery(this).val().toUpperCase()); 
 
});
input#test { 
 
    text-transform: uppercase; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" id="test">

如果您使用與上'Z'0x5a)第二個條件,那麼keyup轉換爲大寫事件調用是沒有意義的,因爲你不會有任何降低charcters輸入。