2017-02-06 11 views
1

私は正規表現専門家だが、私はそれを行くを与えてくれたの段階で2000は、ここで私が作ってみたものです:正規表現100から100

^([1]*[1-9]00|1000|2000)$ 

アイデアは、2000年に100をできるようにすることですそれを含めて100刻みで入力してください。

私は手動でテストしました。それは働くと思われますが、これが最善の解決策ですか?誰も目障りなエラーを見ることができますか?

フィードバックを感謝します。

+0

この正規表現は、たとえば '2100'とは一致しません。 –

+0

'[1]'は '1 'と同じです – axiac

答えて

3

正規表現が有効です。ちょうど[1] == 1に注目してください。代替方法は、

^(1?[1-9]00|[12]000)$ 

demoを参照してください。

あなたは、サーバー側の検証を使用している場合は、代わりに正規表現のint型の操作を好む:if (myNumber >= 100 && myNumber <= 2000 && myNumber % 100 == 0)

例:すべての

var random = new Random(100); 
int myNumber; 

for (int i = 0; i < 5000; i++) 
{ 
    myNumber = random.Next(0, 10000); 
    if (myNumber >= 100 && myNumber <= 2000 && myNumber % 100 == 0) 
    { 
     Console.WriteLine($"{myNumber} respect the conditions."); 
    } 
} 
+1

@TimBiegeleisen目標は100から2000までの数字をマッチさせることです。私はOPの質問に10000の痕跡は見当たりません。 –

+0

おっと...答える前に全質問を読むのが助かります:-) +1 –

+0

@TimBiegeleisen問題はありません; –

1

まず、正規表現は、このようなタスクのための最善の解決策ではありません。正規表現は、任意の文字列に一致するのに適しています。数字を使って作業したいと思っています。使用するプログラミング言語は、おそらく正規表現以外のものに役立つでしょう。しかし

、あなたが主張する場合は、あなたの正規表現しなければならない多くの整数100200 ... 90010001100 ... 2000

00で終わるこれらの数字に一致する正規表現。接頭辞は、1から9までの整数、最初の数字として1、および20の2桁の数字に一致します。一緒に入れて

、正規表現は次のとおりです。

([1-9]|1[0-9]|20)00 

作品:

(   # start a group 
    [1-9]   # match any digit between 1 and 9... 
    |    # ... or ... 
    1[0-9]  # ... match any 2-digit number that starts with 1 
    |    # ... or ... 
    20   # match 20 
)   # end o the group 
00   # match 00 

別の正規表現は、次のとおりです。

(1?[1-9]|[12]0)00 

ITグループ値別の方法で1..20

(
    1?   # match 1 or nothing 
    [1-9]   # match any digit between 1 and 9 
    |    # ... or ... 
    [12]0   # match 1 or 2 followed by 0 (i.e. match 10 or 20) 
) 
00   # end with 00 

1?[1-9]10以外119間の数字と一致します。 1020[12]0と一致します。

+0

素晴らしい説明ありがとう。 –

+0

正規表現ではなく、(input> = 100 && input%100 == 0 && input <= 2000)の場合はどうでしょうか?個人的に、私はここの正規表現が好きです... – Gerrit0

+0

私はバリデーターでそれを使用していますので、カスタムを作成する必要はありません。 –