0

テキストボックスを数字または 2 つの特別な文字列ケース (「na」または「tx」) のいずれかに制限しようとしています。入力に数字が含まれる場合、「na」と「tx」は無効であり、入力ボックスでは使用できません。「na」または「tx」が存在する場合、数字は許可されません。

私は正規表現に非常に慣れていませんが、これを構築することは可能ですか? これが私がこれまでに持っているものです:

event.sender.element.find("input").keyup(function () {
    this.value = this.value.replace(/((?!na)|([^0-9]))/g, '');
});

基本的なオンラインの例を使用して、入力を純粋な数字に制限する方法を知っています。しかし、私の現在の一連の要件は、これを非常に困難なものにしています。

4

2 に答える 2

2
string = string.replace(/^(n(a?|$)|t(x?|$)|[0-9]*).*$/g,'$1');

ただし、一般的にonkeypress&onchangeイベントを併用すると、より良い結果が得られます。1 つ目は無効な文字の「ちらつき」を防ぎ、2 つ目は、たとえばマウスでデータを貼り付けて変更するのを防ぎます。参照: キーダウン時の数値入力を防ぐ方法いつものように: サーバー上で再検証してください。

于 2013-10-24T00:06:03.847 に答える
-1
$('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 文字が必要だからです。

于 2013-10-23T20:15:56.827 に答える