1

単純なフォームの1、2、または3桁の年齢を確認する正規表現コードを書き込もうとしています。3桁の場合、先頭の桁は1である必要があり、先頭の桁が0になることはありません。

私がこれまでに持っているもの:

/^1[0-9][0-9]$|^[0-9][0-9]$|^[0-9]$/

この奇妙な振る舞いの例:

> myRe = /^1[0-9][0-9]$|^[0-9][0-9]$/;
> myRe.exec(023);
["19"]
> myRe.exec(052);
["42"]
4

4 に答える 4

2

023は数値であり、正規表現は数値では機能しません。そのため、JavaScript は最初に数値を文字列に変換します。ゼロであるため、これは 8 進数です。そう 023 は実際には、そう2 * 8 + 3ではありません2 * 10 + 3

あなたはmyRe.exec("023")代わりにやりたいです。また、正規表現を変更して、2 桁のブランチの最初の数字と最後のブランチの 1 桁が では[1-9]なく となるようにすることもでき[0-9]ます。

于 2012-12-03T08:17:06.693 に答える
2

数値リテラルを 0 で始めると、8 進数 (基数 8) として解釈されます。したがって、052 (基数 8) は実際には 42 (基数 10) です。次に、文字列 ("42") に変換され、正規表現されます。

あなたの正規表現に関する限り:次のように少し改善します:

/^1[0-9][0-9]$|^[1-9][0-9]$|^[0-9]$/
于 2012-12-03T08:20:03.300 に答える
1

式では

myRe.exec(023);

023は 8 進数です。チェックしたいのは文字列です。したがって、引用符で囲みます

/^1?\d{1,2}$/- そして、これは同じ正規表現の短くて読みやすいバージョンです。

または/^1?\d?\d$/あなたがもっと好きな方。

于 2012-12-03T08:17:20.817 に答える
0

数値に対して正規表現を適用しています。RegExps は文字列の引数を想定しています。

したがって:

> myRe = /^1[0-9][0-9]$|^[0-9][0-9]$/;
> myRe.exec('023');
null
> myRe.exec('23');
["23"]
> myRe.exec('052');
null
> myRe.exec('52');
["52"]

予想通り。

于 2012-12-03T08:17:51.240 に答える