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 - Fatal编程技术网

C# 正则表达式允许额外的字符

C# 正则表达式允许额外的字符,c#,regex,C#,Regex,尝试用C#编写正则表达式时,正则表达式本身是正确的,并且与字符串匹配: String telRegex = @"(^0[0-9]{10})|(\(0[0-9]{4}\)[0-9]{6}$)"; Match telRegexResult = Regex.Match(textBox1.Text, telRegex); if (telRegexResult.Success) { MessageBox.Show("Your Regex Matches!"); } else MessageBox.

尝试用C#编写正则表达式时,正则表达式本身是正确的,并且与字符串匹配:

String telRegex = @"(^0[0-9]{10})|(\(0[0-9]{4}\)[0-9]{6}$)";
Match telRegexResult = Regex.Match(textBox1.Text, telRegex);
if (telRegexResult.Success) {
    MessageBox.Show("Your Regex Matches!");
} else MessageBox.Show("Your Regex doesn't match!");
如果我输入“01446847362”,它将显示正则表达式匹配,这是预期的结果,但是如果我也输入“01446847362”,它也将显示它是正确的


有什么我可以添加到我的正则表达式中使其关闭的吗?

您的正则表达式包含一个替代项,这意味着它可以捕获:

^0[0-9]{10}
或:

\(0[0-9]{4}\)[0-9]{6}$
因此,您将注意到,任何一方都不包括
^
行开始匹配和
$
行结束匹配,这是确保整个字符串匹配所需的

尝试以下操作,将
^
$
移动到备选方案之外(现在位于其自己的组中):


作为替代方案,您可以使用。尽管模式的长度与@Iridium的长度相同,但这表明在正则表达式中总是有几种方法可以完成相同的事情:

string pattern = @"^0(?'p'\()?[0-9]{4}(?('p')\))[0-9]{6}$";
string pattern = @"^0(?'p'\()?[0-9]{4}(?('p')\))[0-9]{6}$";