2

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

订购并不重要,如果他们多次输入一个面额(即 I $1 $5 $5),我也不担心。输入的开头以大写“I”开头,后跟一个空格。

到目前为止我所拥有的是这个,但我对正则表达式不太熟悉,无法使其与我想要的模式相匹配:

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

我想验证输入是否有效。

4

3 回答 3

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

^Isay 以 say group开头'I'
(?:\s\$,但不捕获空格后跟 a'$'后跟下一个表达式
(?:10?0?|20|50?)表示 group,但不要捕获 1 后跟最多两个 0205 后跟最多一个 0
+表示至少一个匹配
$表示结束与前面的

于 2013-11-13T04:22:31.530 回答
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)
于 2013-11-13T04:22:04.533 回答
-1

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

I[\s\$\d]*$

但是,我建议您使用 String.Split(' ', input) 并从那里开始

于 2013-11-13T04:22:22.230 回答