C# 基于自定义格式的字符串验证
我想验证基于自定义格式的字符串:C# 基于自定义格式的字符串验证,c#,regex,string,validation,format,C#,Regex,String,Validation,Format,我想验证基于自定义格式的字符串:(\uu.\uu,\uu.\uu)。这应该是一个十进制输入,后跟一个逗号,后跟另一个十进制输入,用括号括起来,例如(1.01,3.21)。我希望字符串模式接受一个或多个条目,例如(1.01,3.21)(3.01,4.51)…(2.1,5.6)。有可能做到吗?我认为这应该可以解决您的问题: ^(?:\(\d+(?:\。\d+),\d+(?:\。\d+)+$ 目前,我将所有捕获组设置为非捕获组,因为我不确定您想要捕获的任何特定子组。您可以使用 (?:\(\d+(?:\
(\uu.\uu,\uu.\uu)
。这应该是一个十进制输入,后跟一个逗号,后跟另一个十进制输入,用括号括起来,例如(1.01,3.21)
。我希望字符串模式接受一个或多个条目,例如(1.01,3.21)(3.01,4.51)…(2.1,5.6)
。有可能做到吗?我认为这应该可以解决您的问题:
^(?:\(\d+(?:\。\d+),\d+(?:\。\d+)+$
目前,我将所有捕获组设置为非捕获组,因为我不确定您想要捕获的任何特定子组。您可以使用
(?:\(\d+(?:\.\d+)?,\d+(?:\.\d+)?\))+
或使用全球标志
\(\d+(?:\.\d+)?,\d+(?:\.\d+)?\)
将匹配您的模式1次或多次,并返回一个匹配项。将只匹配您的模式一次。但是,使用全局标志,您将获得作为单独结果的所有匹配
说明:
(?: //begin non-capturing group
\( //match opening parentheses
\d+ //match 1 or more numbers
(?:\.\d+)? //optionally match a dot followed by 1 or more numbers
, //match a comma
\d+(?:\.\d+)? //same pattern as before comma
\) //match closing parentheses
)+ //close non-capturing group, match the group 1 or more times
解决这一问题的一种方法是:
- 使用RegEx返回
模式的匹配项(x,y)
- 使用扩展方法提取
和x
y
- 使用
方法检查decimal.TryParse(..)
和x
是否为y
类型decimal
- 检查输入字符串是否包含所需模式以外的内容
private bool IsValidInput(字符串输入)
{
变量模式=@“\(.*?\s?,\s?(.*?\)”;
var xpatt=@“\s+\(\\\s+\)\,\(\)\,\)\s+\({2,}124\){2,}124^\($”;
var q=Regex.Matches(输入,模式)
.Cast()
.SelectMany(x=>x.Groups.Cast()
.跳过(1))
.选择(x=>x.Value);
return!Regex.IsMatch(输入,xpatt)
&&q.Count()>0
&&输入。替换(“,”)。长度
==(input.Count(x=>x='(“| | x==”)“| | x==”,”)
+q.Sum(x=>x.Length))
&&q.All(x=>decimal.TryParse(x,out));
}
因此,函数返回:
(1.01, 3.21)(3.01, 4.51)(2.1, 5.6) => true
(abc, 3.21)(3.01, 4.51)(2.1, 5.6) => false
(3.21)(3.01, 4.51)(2.1, 5.6) => false
1.01, 3.2 13.01, 4.51 2.1, 5.6 => false
1.01, 3.21)(3.01, 4.51)(2.1, 5.6) => false
(1.01, 3.21)(3.01, 4.51)(2.1, 5.6 => false
1.01, 3.21)3.01, 4.51)2.1, 5.6) => false
(1.01, 3.21)3.01, 4.51(2.1, 5.6) => false
(1.01, 3.21)abc(3.01, 4.51)(2.1, 5.6) => false
(1.01, 3.21)(3.01, 4.51)abc(2.1, 5.6) => false
abc(1.01, 3.21)(3.01, 4.51)(2.1, 5.6) => false
(1.01, 3.21)(3.01, 4.51)(2.1, 5.6)abc => false
请显示您迄今为止所做的工作,共享您的代码。可以提供帮助。使用正确的模式
bool isValid=Regex.Replace(输入,@“\(\d+\。\d+,\d+\。\d+\),“”)。长度==0;