2017-12-15 9 views
0

私は現在、入力テキストボックスのキー入力時に発生するイベントを持っています。私は現在、ほとんどの部分で働いている英数字に入力を制限するいくつかの正規表現を持っています。しかし、私は、正規表現はまだ以下の文字を許可することがわかった​​。英数字以外の文字を許可する正規表現

私は、これらの文字のcharCodesためfalseを返すことができますが、私は正規表現は、文字を有効または何の仕事をして、このシナリオでは正規表現を使用する点であるべきであると感じています。

誰も私がこれを訂正する方法を知っていますので、英数字以外の文字は検証に失敗します。

EDIT:追加コードスニペット

$('#nationalIdNumber').keypress(function(e) { 
 

 
    var regex = new RegExp("^[a-zA-Z0-9]+$"); 
 
    var str = String.fromCharCode(!e.charCode ? e.which : e.charCode); 
 

 
    if (regex.test(str) || e.keyCode === 8 || e.keyCode === 37 || e.keyCode === 39 || e.keyCode === 46) { 
 
    return true; 
 
    } 
 

 
    e.preventDefault(); 
 
    return false; 
 
});
<script src="https://code.jquery.com/jquery-3.2.1.js" integrity="sha256-DZAnKJ/6XZ9si04Hgrsxu/8s717jcIzLy3oi35EouyE=" crossorigin="anonymous"></script> 
 

 
<input id="nationalIdNumber" type="text" />

+1

文字クラスで 'a-Z'を使用していますか?与えられた正規表現は正常に動作するはずです。 – Tushar

+0

私はここでRegexをhttps://regex101.com/にチェックしましたが、%記号を使用できません –

+0

質問を編集してバグを表示します。私はそれを試して、実際には正規表現で '% 'を許可します。私はそれがこれらを可能にする '数値の' keyCode'ので5'& '%が'同じであると 'fromCharCode'は%'キーを押して 'は' 5'を与えるだろう、これはJS自体@Tushar @KhanjanBhatt –

答えて

1

別のブラウザでキーコードで問題を考慮し、編集

、あなたはアプローチを変更してみてください:

$('#nationalIdNumber').on('input',function() { 
    $(this).val($(this).val().replace(/[^a-z0-9]/ig,'')); 
}); 

これは-ZA-Z0-9ではないすべてのコンテンツを削除し、この方法であなただけではないテキストが


古い答えを押すと、キーを挿入するだけでなく、貼り付け、CTRL-V処理します

正規表現はokです、あなたがもしからe.keyCode === 37 || e.keyCode === 39 || e.keyCode === 46を削除する必要があります:あなたがしたい場合%から37件の結果、'および46の結果と39件の結果.以上に、これはシフト+何か

の組み合わせでありますマンタイに条件(そのコードはShiftキーを押さずに左矢印、右矢印、削除)を入力してください。のように入力してください。regex.test(str) || e.keyCode === 8 || (e.shiftKey === false && (e.keyCode === 37 || e.keyCode === 39 || e.keyCode === 46))

+0

これらのkeyCodeは、Mozilla/Safariで防止されていた左、右、および削除キーを許可することです。だから、Chromeでは違法な文字にも対応しているようだ。 – JohnCooling

関連する問題