0

ASP.Netのテキストボックスで4桁の数値を検証するために使用する正規表現を、高低で検索しています。

4桁の数字は2つに分割され、最初の数字は0〜9である必要があり、数字の最後の部分は001〜365にすることができます。したがって、有効な数字である1001または0365にすることができます。基本的に、日付のコードとは、数字の最初の部分または最初の桁が年であり、最後の部分が日/月であるため、001は1月1日、365は12月31日です。

誰か助けてもらえますか?

4

3 に答える 3

3

正規表現で数値範囲を検証するのは少し難しいですが、可能です:

^[0-9](00[1-9]|0[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-5])$

代わりに、次のことをお勧めします。

^[0-9]([0-9]{3})$

次に、キャプチャされた最初の一致 (最後の 3 桁のみが含まれます) を取得し、それが より大きいか0小さいかを確認し366ます。

Match m = Regex.Match(input, @"^\d(\d{3})$");
int day = int.Parse(m.Groups[1].Value);
if(day > 0 && day < 366)
   // valid
else
   // invalid
于 2012-10-31T18:53:47.413 に答える
2

@gregに同意します。これは正規表現の適切な使用法ではありません。しかし、桁数は固定されているので、実際には難しくありません。

^\d([12]\d\d|3[0-5]\d|36[0-5]|0\d[1-9]|0[1-9]\d)$

検証のために int に変換する必要はありません。

翻訳: 最初の桁は何でもかまいません。1 または 2 で始まる 3 桁の数字が続く必要があります。または 3[0-5] で始まります。または 36 から始まり、365 までです。または 0 で始まり、ゼロ以外の数字が 1 つある (@m.buettner に感謝!)

注:上記の\dは「数字」を意味します。[0-9].NET では、それぞれを置き換えることができます\d

おまけ: 閏年に 366 日を許可するには、上記を 2 倍にして最初の桁で条件付けします。2 が 2012 年を意味し、0 が 2020 年を意味する場合、うるう年の数字は 2、6、0 であり、次のようになります。

^([1345789]([12]\d\d|3[0-5]\d|36[0-5]|0\d[1-9]|0[1-9]\d)|[260]([12]\d\d|3[0-5]\d|36[0-6]|0\d[1-9]|0[1-9]\d))$

ええ、それは手に負えなくなっています。int に変換して確認できる場合は、そうしてください。

于 2012-10-31T18:56:11.753 に答える
1

私はグレッグに同意します。エントリが数値であり、基本的に仕様に準拠していることを確認できますが、形式を検証した後、プログラムで確認する必要があります。

これの 1 つの正規表現は /^[0-9]{1}[0-3]{1}[0-9]{2}$/ です。

次に、最後の 3 桁を分割して確認する必要があります。

www.regextester.com は、式をすばやく試すのに便利です。www.regexlib.com は、ユーザーが送信した多数の正規表現文字列の優れたリポジトリです。

于 2012-10-31T18:58:13.067 に答える