匹配美元面额数组的正则表达式模式

时间:2013-11-13 04:10:55

标签: c# regex

用户可以输入以下内容: I $ 1 $ 5 $ 10 $ 20 $ 50 $ 100

订购并不重要,如果他们不止一次进入面额(即1美元5美元5美元),我并不担心。输入的开始以资本" I"然后是一个空格。

到目前为止,我对此有所了解,但我对正则表达式并不太熟悉,并且无法使其符合我想要的模式:

  

^ I \ S(\ $ 1 | \ $ [5] | \ 10 $ | \ $ 20 | \ $ 50 | \ $ [100])$

我想验证输入是否有效。

3 个答案:

答案 0 :(得分:2)

regex = "^I(?:\s\$(?:10?0?|20|50?))+$"

^I说从'I'开始 (?:\s\$表示组,但不捕获空格,后跟'$'后跟下一个表达式
(?:10?0?|20|50?)表示组,但不捕获1,然后捕获最多两个0 20 5,然后最多一个0 +表示至少有一场比赛 $以前面的

结尾

答案 1 :(得分:0)

我们的想法是在I之后指望空格,$1$5等......

string[] options = 
            {
                "I $1 $5 $10 $20 $50 $100",
                "I $1 $5 $5",
                "I wrong",
                "$1 $5 $5",
                "I",
                "I ",
            };
var reg = new Regex(@"^I\s(\s|(\$1|\$5|\$10|\$20|\$50|\$100))*$");

foreach (var option in options)
{
    var status = reg.Match(option).Success ? "valid" : "invalid";
    Console.WriteLine("{0} -> is {1} (length: {2})", option.PadRight(25), status, option.Length);
}

打印:

I $1 $5 $10 $20 $50 $100  -> is valid (length: 24)
I $1 $5 $5                -> is valid (length: 10)
I wrong                   -> is invalid (length: 7)
$1 $5 $5                  -> is invalid (length: 8)
I                         -> is invalid (length: 1)
I                         -> is valid (length: 2)

答案 2 :(得分:-1)

您使用正则表达式检查数字

I[\s\$\d]*$

无论我建议你使用String.Split('',输入)并从那里开始