$('input').keyup(function () {
var a = $(this).val();
if (a.match(/^tx/)) {
a = 'tx';//set manually
} else if (a.match(/^na/)) {
a = 'na';//set manually
} else if(a.match(/[\d]/)) {
a = a.replace(/[^0-9]+/g, '');//replace all but numbers
} else if (a.match(/^[nt]/)) {
a = a.replace(/^([tn])([a-zA-Z])+$/,'$1');//replace with first letter
} else {
a = '';//matches nothing equals nothing
}
$(this).val(a);//print new value
})
正規表現を使用して不要な入力を削除し、デモに関するレポートを提供します。'tx' または 'na' で始まらず、数字がある場合は数字モードに切り替わり、どちらかで始まる場合はそれらにハード セットされます。一致するものがない場合は、空になります。
編集
私の答えは正しい結果をもたらしましたが、正規表現の場合ほど単純ではありませんでした。
そのため、Wrikkens の正規表現も簡単に追加できます:
http://jsfiddle.net/filever10/FQ5aD/
機能の最大の違いは、「t5」のような文字列で、wrikkens では「t」に変更され、私の場合は数値モードをトリガーして「5」に変更されます。
これにより、問題のパラメータに適合させることができます。その時点では 'tx' も 'na' も存在しないため、't' と 'n' はまだ一致していませんが、数字は一致するため、数字が引き継ぎます。数字として一致する必要があるのは 1 文字だけであり、他の文字は一致するために 2 文字が必要だからです。