web-dev-qa-db-ja.com

数字専用の正規表現

私は正規表現をまったく使用していないので、トラブルシューティングが困難です。含まれている文字列がすべて数字の場合にのみ正規表現を一致させます。しかし、以下の2つの例では、 "1234 = 4321"のようにすべての数字と等号を含む文字列を照合しています。私はこの振る舞いを変更する方法があると確信しています、しかし私が言ったように、私は本当に正規表現を使ってあまりしませんでした。

string compare = "1234=4321";
Regex regex = new Regex(@"[\d]");

if (regex.IsMatch(compare))
{ 
    //true
}

regex = new Regex("[0-9]");

if (regex.IsMatch(compare))
{ 
    //true
}

問題がある場合は、C#と.NET2.0を使用しています。

265
Timothy Carter

開始アンカーと終了アンカーを使用します。

Regex regex = new Regex(@"^\d$");

複数の数字を一致させる必要がある場合は"^\d+$"を使用してください。


"\d"[0-9]および東アラビア数字の٠١٢٣٤٥٦٧٨٩のような他の数字と一致することに注意してください。 "^[0-9]+$"を使用して、一致をアラビア数字の0から9だけに制限します。


数字以外の数値表現(スターターの10進値など)を含める必要がある場合は、 @tchrist正規表現を使用した数値解析の総合ガイド を参照してください。

429
Bill the Lizard

あなたの正規表現は数字を含むもの全てにマッチするでしょう、あなたは文字列全体をマッチさせそしてそれから一つ以上の数をマッチさせるためにアンカーを使いたいです:

regex = new Regex("^[0-9]+$");

^は文字列の先頭を固定し、$は文字列の末尾を固定し、+はその前の1つ以上(この場合は数字)に一致します。

88
Robert Gamble

あなたが小数点と千のマーカーを容認する必要があるならば

var regex = new Regex(@"^-?[0-9][0-9,\.]+$");

数値がマイナスになる可能性がある場合は、 " - "が必要です。

33
Andy

文字列全体の一致ではなく「一致」を検出しているため、一致しています。文字列の最初と最後を特に探すように正規表現を変更することでこれを修正できます。

^\d+$
17
kasperjj

おそらく私の方法はあなたを助けるでしょう。

    public static bool IsNumber(string s)
    {
        return s.All(char.IsDigit);
    }
15
Raz Megrelidze

これは整数と10進数で機能します。数にコンマ千の区切り文字がある場合は一致しません。

"^-?\\d*(\\.\\d+)?$"

これと一致するいくつかの文字列:

894
923.21
76876876
.32
-894
-923.21
-76876876
-.32

そうでないいくつかの文字列:

hello
9bye
hello9bye
888,323
5,434.3
-8,336.09
87078.
13
ultraklon

^\d + $、これは英語では "文字列の先頭"、 "1桁以上"、 "文字列の末尾"です。

11
Mark Brackett

これが私の仕事です。

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

そしていくつかのテスト

陽性テスト:

string []goodNumbers={"3","-3","0","0.0","1.0","0.1","0.0001","-555","94549870965"};

陰性テスト:

string []badNums={"a",""," ","-","001","-00.2","000.5",".3","3."," -1","--1","-.1","-0"};

C#だけでなく、Java、Javascript、およびPHPについても確認済み

10
Marina K.

醜いフォーマットですみません。任意の桁数の場合

[0-9]*

1桁以上の場合

[0-9]+
8
fnc12

すべての桁が数字(0-9)かどうかを確認する必要がある場合

^[0-9]+$

1425 TRUE

0142 TRUE

0 TRUE

1 TRUE

154a25 FALSE

1234 = 3254 FALSE

8

別の方法:ペルシャ語やアラビア語などの国際番号と一致させたい場合は、次の表現を使用できます。

Regex = new Regex(@"^[\p{N}]+$");

リテラルピリオド文字と一致させるには、次のようにします。

Regex = new Regex(@"^[\p{N}\.]+$");
4
S.M.Mousavi

開始アンカーと終了アンカーを使用します。

 Regex regex = new Regex(@"^\d$");
 Use "^\d+$" if you need to match more than one digit.
3

上記の解決策のどれも私の目的に合っていませんでしたが、これは私のために働きました。

var pattern = @"^(-?[1-9]+\d*([.]\d+)?)$|^(-?0[.]\d*[1-9]+)$|^0$|^0.0$";
return Regex.Match(value, pattern, RegexOptions.IgnoreCase).Success;

有効な値の例: "3"、 " - 3"、 "0"、 "0.0"、 "1.0"、 "0.7"、 "690.7"、 "0.0001"、 " - 555"、 "945465464654"

無効な値の例: "a"、 ""、 ""、 "。"、 " - "、 "001"、 "00.2"、 "000.5"、 "。3"、 "3."、 " - 1" 、 " - 1"、 " - 1"、 " - 0"、 "00099"、 "099"

3
Daniele D.

私はこれが最も簡単なものだと思います、そしてそれは数字を書くことのヨーロッパとアメリカの方法を受け入れます。アメリカ10,555.12ヨーロッパ10.555,12また、これはいくつかのコンマまたはドットを次々に許可しません。 10..22または10、22。55または55のようなこの数字に加えて、55が合格します。これは便利かもしれません。

^([,|.]?[0-9])+$
2
Azur

文字列から数字だけを抽出したい場合は、パターン "\ d +"が役に立ちます。

1

整数と浮動小数点数の正規表現:

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

数字はピリオド(先頭の数字なし)で始まり、数字はピリオド(末尾の数字なし)で終わることができます。上記の正規表現は両方とも正しい数として認識します。 A。数字のない(ピリオド)自体は正しい番号ではありません。そのために、2つの正規表現部分(「|」で区切られている部分)が必要です。

お役に立てれば。

1
Tagar