2の精度まで正の小数を検証しようとしている正規表現をテストするJavascript関数があります。
function isPositiveDecimalPrecisionTwo(str) {
return /^\d*(\.\d{1,2}$)?/.test(str);
}
コードから呼び出すと、期待した結果が得られません。
例えば:
var a = isPositiveDecimalPrecisionTwo("1"); // expect t, returns t
var b = isPositiveDecimalPrecisionTwo("1.2"); // expect t, returns t
var c = isPositiveDecimalPrecisionTwo("1.25"); // expect t, returns t
var d = isPositiveDecimalPrecisionTwo("1.257"); // * expect f, returns t *
var e = isPositiveDecimalPrecisionTwo("1.2575"); // * expect f, returns t *
var f = isPositiveDecimalPrecisionTwo(".25"); // * expect t, returns f *
var g = isPositiveDecimalPrecisionTwo("d"); // expect f, returns f
var h = isPositiveDecimalPrecisionTwo("d1"); // expect f, returns f
var i = isPositiveDecimalPrecisionTwo("1d"); // * expect f, returns t *
var j = isPositiveDecimalPrecisionTwo("1d1"); // * expect f, returns t *
var k = isPositiveDecimalPrecisionTwo("-1"); // expect f, returns f
var l = isPositiveDecimalPrecisionTwo("-1.5"); // expect f, returns f
3つの問題があります:
- 「1.257」または「1.2575」を検証するとtrueが返されますが、
\d{1,2}
- 「.25」を検証するとfalseが返されますが、
^\d*
- 「1d」または「1d1」を検証するとtrueが返されます。
\.
適切にエスケープされた「。」のように見えるときは、任意の文字として読んでいるように見えます。(ドット)。
ただし、regexpal.comのようなツールを使用すると、同じregexpが期待どおりに検証されているように見えます。
http://regexpal.com/?flags=g®ex=%5E%5Cd%2B(%5C.%5Cd%7B1%2C2%7D%24)%3F&input=
私は何が欠けていますか?