0

double amount 値のみを取る正規表現は word を取るべきではありません、javascript の -ve 値

$('document').ready(function() {
        $(".btn").click(function() {
            var amount = $('#amountId').val();

            if (amount <= 0) {
                alert("Please insert a valid Amount! ");
                return false;
            }
        });

私はこれを試しましたが、上で述べたように、より多くの検証が必要です

4

2 に答える 2

0

いくつかのステップでそれを行い、無効な文字を探し、空白を取り除き、有効な整数をチェックしてから、それを解析して値をチェックすることができます。

ただし、1 つの正規表現で試してみたい場合は、次のようにしてみてください。

var pattern = /^[0-9]*(.[0-9]*)?([eE][-+][0-9]*)?$/

trim空白を無視する場合は、最初に空白 (入力文字列) を処理する必要があります。許可されていない場合は、0 を除外する必要もあります。

以下の関数はこれの一部を行い、解析された数値 ( epochparseFloatで提案されているように使用) とそれが有効かどうかを示すオブジェクトを返します。これをコードに入れ、微調整して、必要なことを実行できるはずです。

function processInput(s) {
    var pattern = /^[0-9]*(.[0-9]*)?([eE][-+][0-9]*)?$/
    var answer = { result: 0, isValid: false };

    // remove whitespace from start and end 
    s = s.trim();
    if (s.length > 0) { 
        answer.isValid = pattern.test(s);
        if (answer.isValid) { 
            answer.result = parseFloat(s);
        }
        // Might need a special test for 0 here
    }
    return answer;
}

特定のケースを 1 つか 2 つ見落としている可能性がありますが、多くの可能性をテストした結果、次の結果が得られました。

'3' ->  { result: 3, isValid: true }
'.289213123' ->     { result: 0.289213123, isValid: true }
'0.2' ->    { result: 0.2, isValid: true }
'3.14' ->   { result: 3.14, isValid: true }
'3.14.14' ->    { result: 0, isValid: false }
'-3.14' ->  { result: 0, isValid: false }
'314e-2' ->     { result: 3.14, isValid: true }
'0.0314E+2' ->  { result: 3.14, isValid: true }
'3.14more non-digit characters' ->  { result: 0, isValid: false }
'3.' ->     { result: 3, isValid: true }
'' ->   { result: 0, isValid: false }

入力で負数は許可されていないため、有効な負数は false を返すことに注意してください。したがって、これは一般的な「isNumeric」ではなく、このケースに合わせて調整されています。必要に応じて、指数構文に一致するものをドロップすることもできます。

于 2013-09-06T09:18:31.240 に答える
0

試しましたparseFloatか?

MDN から:

次の例はすべて 3.14 を返します。

parseFloat("3.14");
parseFloat("314e-2");
parseFloat("0.0314E+2");
parseFloat("3.14more non-digit characters");
于 2013-09-06T06:17:05.830 に答える