Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于自定义格式的字符串验证_C#_Regex_String_Validation_Format - Fatal编程技术网

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;