MVCのモデルに検証を適用し、正規表現を使用して検証を行いたい。
モデルのIDが送信時に0より大きいことを検証しようとしています。
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を節約できます。
これはどうですか:^[1-9][0-9]*$
最善の解決策は、正規表現の2つの括弧の間に+記号を追加することだと思います。
^[1-9]+[0-9]*$
コード:
^([0-9]*[1-9][0-9]*(\.[0-9]+)?|[0]+\.[0-9]*[1-9][0-9]*)$
負でない整数のみが必要な場合は、^\d+$
を試してください。
別の解決策:
^[1-9]\d*$
\d
[0-9]
と同等
私はこれを試してみましたが、ゼロより大きいすべての小数/整数値でうまくいきました
空白を許可します:^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$
空白なし:^(?=.*[1-9])\d*(?:\.\d{1,2})?$
そこに行きます:
MatchCollection myMatches = Regex.Matches(yourstring, @"[1-9][0-9]*");
送信時:
if(myMatches.Count > 0)
{
//do whatever you want
}
以下の式を使用できます。
(^\d*\.?\d*[1-9]+\d*$)|(^[1-9]+\.?\d*$)
有効なエントリ:1 1. 1.1 1.0すべての正の実数
無効なエントリ:すべての負の実数と0および0.0
簡単な答えは:^[1-9][0-9]*$