用户可以输入以下内容: I $1 $5 $10 $20 $50 $100
订购并不重要,如果他们多次输入一个面额(即 I $1 $5 $5),我也不担心。输入的开头以大写“I”开头,后跟一个空格。
到目前为止我所拥有的是这个,但我对正则表达式不太熟悉,无法使其与我想要的模式相匹配:
^I\s(\$1|\$[5]|\$10|\$20|\$50|\$[100])$
我想验证输入是否有效。
regex = "^I(?:\s\$(?:10?0?|20|50?))+$"
^I
say 以 say group开头'I'
(?:\s\$
,但不捕获空格后跟 a'$'
后跟下一个表达式
(?:10?0?|20|50?)
表示 group,但不要捕获 1 后跟最多两个 0或20或5 后跟最多一个 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)
您使用正则表达式检查数字
I[\s\$\d]*$
但是,我建议您使用 String.Split(' ', input) 并从那里开始