我需要检查用户输入是否与参数类似。它是一个字符串(不可更改),必须看起来像以下示例:
p123[2] -> writable array index
r23[12] -> read only array index
p3[7].5 -> writable bit in word
r1263[13].24 -> read only bit in word
15 -> simple value
允许用户输入任何一个,我的功能必须区分它们才能调用正确的功能。
一个想法是检查特定顺序的字符,例如“p []”,“r []”,“p []。”等。
但我不知道如何在不检查每个单个字符并使用多个案例的情况下存档...
欢迎任何其他关于如何确保用户输入正确的想法。
答案 0 :(得分:0)
您可以检查输入是否与正则表达式匹配:
1 ) Regex.IsMatch(input,@"^p\d+\[\d+\]$"); // match p123[2]
2 ) Regex.IsMatch(input,@"^r\d+\[\d+\]$"); // match r23[12]
3 ) Regex.IsMatch(input,@"^p\d+\[\d+\]\.\d+$"); // match p3[7].5
4 ) Regex.IsMatch(input,@"^r\d+\[\d+\]\.\d+$"); // match r1263[13].24
5 ) Regex.IsMatch(input,@"^\d+$") ;// match simple value
答案 1 :(得分:0)
如果您只需要验证应该在5个提供的共振峰中的1个中的用户输入,请使用正则表达式检查:
Regex.IsMatch(str, @"^(?:(?<p>[pr]\d+)(?:\[(?<idx>\d+)])?(?:\.(?<inword>\d+))?|(?<simpleval>\d+))$")
请参阅regex demo
<强>描述强>:
^
- 字符串开头(?:
- 交替小组的开始
(?<p>[pr]\d+)
- 小组&#34; p&#34;在p
或r
以及1位或更多位数字
(?:\[(?<idx>\d+)])?
- [
的可选序列,1个或多个数字(捕获到Group&#34; idx&#34;)然后]
(?:\.(?<inword>\d+))?
- 文字.
的可选序列,然后将1个或多个数字捕获到组&#34; inword&#34; |
- 或(然后是第二种选择)(?<simpleval>\d+)
- Group&#34; simpleval&#34;捕获一个或多个数字)
- 外部分组的结束$
- 字符串结束。如果p
或r
可以任何 ASCII字母,请使用[a-zA-Z]
代替[pr]
。
var strs = new List<string> { "p123[2]","r23[12]","p3[7].5","r1263[13].24","15"};
var pattern = @"^(?:(?<p>[pr]\d+)(?:\[(?<idx>\d+)])?(?:\.(?<inword>\d+))?|(?<simpleval>\d+))$";
foreach (var s in strs)
Console.WriteLine("{0}: {1}", s, Regex.IsMatch(s, pattern));