web-dev-qa-db-ja.com

0より大きい数の正規表現?

MVCのモデルに検証を適用し、正規表現を使用して検証を行いたい。

モデルのIDが送信時に0より大きいことを検証しようとしています。

61
Lando

MVCがどのように関連するかわかりませんが、IDが整数の場合、このBREは次のことを行う必要があります。

    ^[1-9][0-9]*$

整数ではなく実数(浮動小数点数)に一致させたい場合、通常の10進数(つまり、2.5または3.3̅)とともに、上記のケースを処理する必要があります。 1(つまり、0.25)、およびパターンの小数部が0の場合(つまり、2.0)。そして、その間に、整数の先行ゼロのサポートを追加します(つまり、005):

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

この2番目は拡張REであることに注意してください。同じことがBasic REでも表現できますが、最近ではほとんどすべてがEREを理解しています。式を消化しやすい部分に分けましょう。

    ^(

キャレットは行頭のヌルと一致するため、正規表現の前にキャレットを付けると、行頭に固定されます。下のorバーのため、開き括弧があります。それについては後で詳しく説明します。

      0*[1-9][0-9]*(\.[0-9]+)?

これは、任意の整数または 1を超える浮動小数点数に一致します。したがって、2.0は一致しますが、0.25は一致しません。開始時の0*は先行ゼロを処理するため、005 == 5です。

                              |

このコンテキストでは、パイプ文字は "or-bar"です。この表現の評価のために、他のすべてよりも優先順位が高く、2つの正規表現を効果的に結合します。括弧は、ORバーで区切られた複数の式をグループ化するために使用されます。

そして第二部:

                               0+\.[0-9]*[1-9][0-9]*

これは、1つ以上の0文字で始まる任意の数字に一致します(+*に置き換えてゼロ以上のゼロ、つまり.25に一致し、その後にピリオドが続きます。 0ではない数字を少なくとも1つ含む数字列。したがって、これは0より上および1より下のすべてに一致します。

                                                    )$

そして最後に、カレットが行の先頭に固定されるように、括弧を閉じて正規表現をドル記号で行の末尾に固定します。

もちろん、プログラミング言語で何かを正規表現と照合しようとするのではなく、数値で評価できるようにすると、頭痛の種and CPUを節約できます。

129
ghoti

これはどうですか:^[1-9][0-9]*$

14
cwharris

最善の解決策は、正規表現の2つの括弧の間に+記号を追加することだと思います。

^[1-9]+[0-9]*$
3
3
Eduardo Cuomo

負でない整数のみが必要な場合は、^\d+$を試してください。

2
Uila

別の解決策:

^[1-9]\d*$

\d[0-9]と同等

2
foxiris

私はこれを試してみましたが、ゼロより大きいすべての小数/整数値でうまくいきました

空白を許可します:^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$

空白なし:^(?=.*[1-9])\d*(?:\.\d{1,2})?$

参照: 正規表現は小数点以下2桁でゼロより大きい

そこに行きます:

MatchCollection myMatches = Regex.Matches(yourstring, @"[1-9][0-9]*");

送信時:

if(myMatches.Count > 0)
{
   //do whatever you want
}
1
SolidSnake

以下の式を使用できます。

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

有効なエントリ:1 1. 1.1 1.0すべての正の実数

無効なエントリ:すべての負の実数と0および0.0

0
user3571880

簡単な答えは:^[1-9][0-9]*$

0
Rousonur Jaman

小数点以下2桁でのみ簡略化されています。

^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$

参照: https://www.regextester.com/9447

0
Nikhil