2

最初にプラス/マイナス記号を許可し、その後に html のテキスト フィールド入力で 1 つのドットのみを許可する 10 進数を許可する必要があるという要件があります。

基本的に、テキスト フィールドは通常の整数と 10 進数、および負の整数と負の 10 進数を許可する必要があります。プラス記号とマイナス記号は先頭 (最初の文字) にのみ使用でき、オプションです。また、任意の数の小数点以下の桁数 (例: -12.12345 など) を許可する必要がありますが、エントリ内の小数点 (ドット) は 1 つだけです。

使用できる数字は、1、+ 1、-1、.1、+1.1、-1.1、-.12、+.12、123.4456、-123.345、+123.345 などです。

どんな助けでも大歓迎です。

上記の要件に対して、以下の正規表現を使用しています。

var integerOnly = /[\+\-0-9\.]/g;

以下のスクリプト(わずかに変更して他のスレッドから取得したもの)を検証します。

function restrictInput(myfield, e, restrictionType, checkdot){
    if (!e) var e = window.event
    if (e.keyCode) code = e.keyCode;
    else if (e.which) code = e.which;
    var character = String.fromCharCode(code);
    alert("1 " + character);
    // if user pressed esc... remove focus from field...
    if (code==27) { this.blur(); return false; }
    //alert("2");
    // ignore if the user presses other keys
    // strange because code: 39 is the down key AND ' key...
    // and DEL also equals .
    if (!e.ctrlKey && code!=9 && code!=8 && code!=36 && code!=37 && code!=38 && (code!=39 || (code==39 && character=="'")) && code!=40) {
        alert("3");
        if (character.match(restrictionType)) {
            alert("4");
            if(checkdot == "checkdot" & '-' != character & '+' != character){
                alert("5");
                return !isNaN((myfield.value.toString()==''? '0':myfield.value.toString())+character );
            } else {
                return true;
            }
        } else {
            return false;
        }
    }
}

スクリプトの呼び出し方法は次のとおりです。

<input type="text" id="db" width="3" value=""   onkeypress="return restrictInput(this, event, integerOnly, 'checkdot');"/>

次のようないくつかのケースを除いて、正常に機能します。

  1. +/- 任意の場所を何度でも許可します。私の要件は、最初だけ許可することです。

以下のように正規表現を変更しようとしました。

var integerOnly = /[\+\-]?[0-9\.]/g;

その場合は、式に一致しません。アラート 4 には達していません。

1 つのことは、小数点以下 1 桁のみが許可され、1 桁までしか許可されないことです。

誰かが正規表現を変更して、最初に +/- のみを許可し、一度だけ許可するのを手伝ってもらえますか?

ありがとうございました。

4

4 に答える 4

4

正規表現で遊ぶ代わりに、isNumber次のように関数を使用してテキストを検証します

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}
于 2012-09-26T06:38:02.227 に答える
1
var test_ary = ['1', '+1', '-1', '.1', '+1.1', '-1.1', '-.12', '+.12', '123.4456', '-123.345', '+123.345'];

var reg = /^[\+\-]?(?:\.?\d+|\d+\.?\d+)$/;

var i;


for ( i = 0; i < test_ary.length; i = i + 1) {
    console.log(reg.test(test_ary[i]));
}

テストケースでこれを試すこともできます:)

于 2012-09-26T06:41:29.870 に答える
1

私はあなたがこのようなものが欲しいと思います:

^[-+]?(\d+\.?|\d*\.\d+)$

小数点記号の前の数字または後の数字はオプション (たとえば1.または.1) ですが、両方ではないため、ケースを個別に処理する必要があります。

于 2012-09-26T06:37:57.267 に答える
0

'niksvp'スクリプトを使用して、要件を満たすように少し変更しました。

以下のスクリプトは、すべてのタイプの+/-10進数で機能します。例:1.1、+ 1.1、-1.1、.1、-。1、+。1、1、-1、+ 1、123.345、+ 123.345、-123.345など

function isNumber(myfield, e) {
if (!e) var e = window.event
    if (e.keyCode) code = e.keyCode;
    else if (e.which) code = e.which;
    var character = String.fromCharCode(code);

    var n = myfield.value.toString()==''? '0':myfield.value.toString();
    // this is required to allow numbers of this format
    // -1.1, + 1.1, .1, -.1, +.1 etc
    if(n == '-' | n == '+' | n== '.') {
        n +=0;
    }

    if(n.length > 1) {
        n = n.toString() + character;
    }

   return !isNaN(parseFloat(n)) && isFinite(n);
}

皆様のご協力に感謝いたします。

于 2012-09-27T05:30:03.970 に答える