-7

取得するには、C# で RegEx を作成する必要があります。

MaxUpperLimit = 70;

  • ユーザーは、区切り記号で複数の値を入力できます

    例えば10,20,30,35-40,45,50-55 //Valid

  • ユーザーは複数の値を入力できます - 区切り

    例えば10,20-30,35-40 //Valid

  • ユーザーは最大制限変数値を追加できます

    例えば10,20-30,35-40,71-MaxUpperLimit //Invalid _10,20-30,35-40,50-MaxUpperLimit //Valid

  • ユーザーは MaxUppLimit を超える値を入力できません

    例えば45-71 //Invalid

4

4 に答える 4

4

これは挑戦だと思いましたが、次回は本当に何かに挑戦してください。

したがって、m修飾子を使用した完全な正規表現ソリューションは次のとおりです。

^
  (?:
     (?:[0-6]?\d|70)(?:-[0-6]?\d|70)?
  )
  (?:
     ,(?:[0-6]?\d|70)(?:-[0-6]?\d|70)?
  )*
$

説明:

  • ^: 行頭。
  • (?:: グループ化しますが、キャプチャしません。
    • (?:: グループ化しますが、キャプチャしません。
    • [0-6]?\d|70: 00 から 70 まで一致
    • (?:-[0-6]?\d|70)?: 一致-の後に 00 から 70 までの数字が続きます。これはオプションです。
  • ): クロージンググループ
  • (?:,(?:[0-6]?\d|70)(?:-[0-6]?\d|70)?)*: 上記で説明した内容に一致,し、すべて 0 回以上
  • $: 行末
  • m modifier: 行頭と行末をそれぞれ作成^して一致させます$

オンラインデモ

注:これは論理的な順序を考慮しません。たとえば70-50、一致します。

于 2013-05-27T13:50:48.080 に答える
0

これを試して:

bool valid = str.Replace("MaxUpperLimit", MaxUpperLimit).Split(',').Select(p => p
                                     .Split('-')
                                     .Select(s=>s.Trim()).ToArray())
            .All(subPart => {
                    int i1, i2;
                    return (subPart.Length == 1 && int.TryParse(subPart[0], out i1) && i1 <= MaxUpperLimit) 
                    || (subPart.Length == 2 
                            && int.TryParse(subPart[0], out i1) && i1 < MaxUpperLimit 
                            && int.TryParse(subPart[1], out i2) && i2 <= MaxUpperLimit 
                            && i1 < i2);
                });
于 2013-05-27T13:56:58.897 に答える