2

例:

"1"     yes
"-1"    yes
"- 3"   no
"1.2"   yes
"1.2.3" no
"7e4"   no  (though in some cases you may want to allow scientific notation)
".123"  yes
"123."  yes
"."     no
"-.5"   yes
"007"   yes
"00"    yes
4

5 に答える 5

4

これにより、オプションの「+」と「-」を前に付けることができます。また、末尾または最初の空白を許可します。

/^\s*[+-]?(?:\d+\.?\d*|\d*\.\d+)\s*$/
于 2008-09-25T21:08:31.323 に答える
4

いくつかの選択肢があります。まず、ゼロ幅の先読みアサーションを使用すると、残りの正規表現をより単純にすることができます。

/^[-+]?(?=\.?\d)\d*(?:\.\d*)?$/

先読みを避けたい場合は、正規表現がバックトラッキングしないようにします。

/^[-+]?(?:\.\d+|\d+(?:\.\d*)?)$/
/^[-+]?(\.\d+|\d+(\.\d*)?)$/ # if you don't mind capturing parens

「基数 10」と言ったことに注意してください。実際には、「014」は 8 進数を意味する可能性があるため、余分な先行ゼロを禁止したい場合があります。

/^[-+]?(?:\.\d+|(?:0|[1-9]\d*)(?:\.\d*)?)$/
/^[-+]?(\.\d+|(0|[1-9]\d*)(\.\d*)?)$/

最後に、一部の正規表現はサポートしていないため、または一部の正規表現では「ARABIC-INDIC DIGIT」などの 0..9 以外の Unicode「数字」との一致を許可\dしているため、 に置き換えたい場合があります。[0-9]\d\d

/^[-+]?(?:\.[0-9]+|(?:0|[1-9][0-9]*)(?:\.[0-9]*)?)$/
/^[-+]?(\.[0-9]+|(0|[1-9][0-9]*)(\.[0-9]*)?)$/
于 2008-10-02T04:20:56.043 に答える
2

指定されたすべての例に一致し、グループをキャプチャしません:

^[+-]?(?:\d+(?:\.\d*)?|\.\d+)$


「1」と一致しない。(等):

^[+-]?(?:\d+(?:\.\d+)?|\.\d+)$


空白を気にしません (トリム関数を使用します)。

于 2008-09-25T21:35:59.930 に答える
2

perlfaq4の正規表現: スカラーが数値/整数/整数/浮動小数点数かどうかを判断するにはどうすればよいですか? 必要なことを行い、「e」表記も処理します。

while( <データ> )
    {
    チョップ;

    print /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/ ?
        "$_ 動作\n"
        :
        "$_ 失敗\n"
        ;
    }

__データ__
1
-1
- 3
1.2
1.2.3
7e4
.123
123。
.
-.5
于 2008-12-07T00:17:01.323 に答える
0

コーディングしている言語によっては、この機能が既に存在している場合があります。

于 2008-09-25T21:09:22.147 に答える