私ができる限り、あなたが本当にする必要があるのはこれだけです:
$('#ssn').keyup(function()
{
this.value = this.value.replace(/(\d{3})\-?/g,'$1-');
});
ただし、これは数字を入力した場合にのみ機能するため、追加のチェックを導入することをお勧めします。
$('#ssn').keyup(function(e) {
if ((e.keyCode > 47 && e.keyCode < 58) || (e.keyCode < 106 && e.keyCode > 95)) {
this.value = this.value.replace(/(\d{3})\-?/g, '$1-');
return true;
}
//remove all chars, except dash and digits
this.value = this.value.replace(/[^\-0-9]/g, '');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="text" id="ssn">
正規表現についてもう少し/(\d{3})\-?/g
:
これは、3桁のグループをそれ自体に置き換え、その後にダッシュを付けます。角かっこは、一致した数字への後方参照を作成し、置換文字列で使用されます ( $1-
-> $1 は後方参照です)。
オプションのダッシュも置き換えられますが、後方参照には含まれないことに注意してください。入力が123
で、置換パターンが のようなもの/(\d{3})/g
になるか/(\d{3}\-?)/g
、値が 、 などになり、123-4
毎回ダッシュが 2 倍になる場合。123--45
123---456
警告:
矢印キーなどが機能しないため、これはユーザーに多少の苦痛を与えます。幸いなことに、これは簡単に修正できます: 関数の先頭に次のコードを追加するだけです:
if (e.keyCode > 36 && e.keyCode < 41)
{
return true;
}
そして、矢印はうまく機能します。他のキー (削除、バックスペース、シフトなど) については、このページを確認してください。
完全な例:ここにフィドルがあります