用户可以输入以下内容: I $ 1 $ 5 $ 10 $ 20 $ 50 $ 100
订购并不重要,如果他们不止一次进入面额(即1美元5美元5美元),我并不担心。输入的开始以资本" I"然后是一个空格。
到目前为止,我对此有所了解,但我对正则表达式并不太熟悉,并且无法使其符合我想要的模式:
^ I \ S(\ $ 1 | \ $ [5] | \ 10 $ | \ $ 20 | \ $ 50 | \ $ [100])$
我想验证输入是否有效。
答案 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('',输入)并从那里开始