いくつかのステップでそれを行い、無効な文字を探し、空白を取り除き、有効な整数をチェックしてから、それを解析して値をチェックすることができます。
ただし、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」ではなく、このケースに合わせて調整されています。必要に応じて、指数構文に一致するものをドロップすることもできます。