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

时间:2018-01-29 10:02:56

标签: c# regex

当尝试在C#中编写Regex表达式时,正则表达式本身是正确的并匹配字符串:

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”,它将显示正则表达式匹配,这是预期的结果,但如果我也放“01446847362word”,它也会显示它是正确的。

我可以添加到我的正则表达式中以使其切断吗?

2 个答案:

答案 0 :(得分:6)

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

^0[0-9]{10}

或者:

\(0[0-9]{4}\)[0-9]{6}$

因此,您必须注意,任何一方都不包含两个 ^行首和$行结束匹配,这是您确保整个字符串都匹配。

尝试以下操作,将^$移到更改之外(现在位于其自己的组中):

String telRegex = @"^((0[0-9]{10})|(\(0[0-9]{4}\)[0-9]{6}))$";

答案 1 :(得分:0)

作为替代方案,您可以使用conditional matching with expression。虽然模式的长度与@ Iridium的相同,但这表明在Regex中总有几种方法可以做同样的事情:

this.socket