実数の正規表現を私なりに考えたのすが、より綺麗な正規表現があれば教えてください。
^[-]?(0|[1-9][0-9]*)(|[.][0-9]+)$
また下記に挙げる「OKとしたい文字列」「NGとしたい文字列」外の実数の表現があれば教えてください。
OKとしたい文字列
正の整数
- 10000
正の少数 - 10.123
ゼロ - 0
負の整数 - -123
負の少数 - -123.123
NGとしたい文字列
+から始まる値
- +123
0から始まる値(0のみを除く) - 000100
- -000100
少数点を含む整数部のみの値 -
少数部のみの値
- .123
指数を用いた値 - 1E+08
カンマを用いた値 - 123,456,789
パイやルートなどの特殊な文字を用いた値 - π
- √2
言語によって正規表現の書き方が微妙に違いますので、対象の言語のタグを追加した方がいいと思います〜!
肝心なところを忘れてました。ご指摘ありがとうございます。Javascript です。
ポイントがいくつか、以下はありですか?
・小数点以下最後が0→123.40とか1.0
・特殊な0→-0とか0.0
・bigint表現→123n
質問ありがとうございます。以下でお願いします。
・小数点以下最後が0→123.40とか1.0
→OK
・-0
→NG
・0.0
→OK
bigint表現
→NG
-0→NG、0.0→OKだとすると-0.0はOKなんでしょうか?
ちなみにケツの0はいくつ合ってもOKなんですよね?1.0000とか
> ・-0
> →NG
質問文の正規表現ではOKと評価されますし、「NGとしたい文字列」には上記条件の記載がないようです。
私の回答でも質問文に合わせて「-0」はOKとしています。
/^[-]?(0|[1-9][0-9]*)(|[.][0-9]+)$/.test('-0') === true
JavaScriptでは 0 と -0 の違いは小さい為、-0 をどのように判定するか、は慎重に判断することをお勧めします。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Equality_comparisons_and_sameness
-0 === 0; // true
1/-0; // -Infinity
1/0; // Infinity
think49さんから指摘ある通り、ちょっと命題に一貫性がないかもしれないですね。
正規表現で数値をチェックするよりはキャストしてしまうのが賢明かもしれません
修正依頼or回答にコメントをください。
返信遅れて申し訳ございません。
0 と -0を区別することは難しいと理解いたしました。
質問の最初の回答とは異なりますが、以下でお願いします。
0.0→OK
-0.0→OK
0.0000000(末尾に0が無限個)→OK

回答1件
あなたの回答
tips
プレビュー