在有效字符后输入无效字符时,正则表达式无法工作?

Posted

技术标签:

【中文标题】在有效字符后输入无效字符时,正则表达式无法工作?【英文标题】:Regex fails to work when invalid characters are entered after valid characters? 【发布时间】:2016-01-31 03:23:26 【问题描述】:

我有一个采用这个正则表达式的 Windows 窗体应用程序:

public bool priceRegex (string parameter)

    Regex regexPrice = new Regex(@"^[0-9]+(\.[0-9][0-9]?)?");
    Match matchPrice = regexPrice.Match(parameter);
    return matchPrice.Success;

并在这里使用它:

if (name.priceRegex(PriceEntryBox.Text) == false)

    MessageBox.Show("Invalid characters entered in Price Box", "Error");

后面跟着一个else,后面跟着其他代码。

这可行,并且当我输入“fdsf”或“dasds123”时会显示消息框,但是当输入“12fsdf”时它会引发异常,而不是显示消息框。有什么帮助吗?

【问题讨论】:

有什么异常? 它不会抛出该输入(或任何其他输入(除了 null)) - 什么是您的有效输入? 你有没有在调试模式下进入它?您的正则表达式不会引发异常。 如果可能,也更喜欢静态实现; return Regex.Match(parameter, @"^[0-9]+(\.[0-9][0-9]?)?").Success; 当出现故障时你应该return 【参考方案1】:

您的旧正则表达式只是检查输入的值是否以有效的东西开头(事实证明,任何以数字开头的东西对您的正则表达式都是有效的)。如果要确保整个内容与正则表达式匹配,则必须以 ^ 开头并以 $ 结尾,而不仅仅是以 ^ 开头。

Regex regexPrice = new Regex(@"^[0-9]+(\.[0-9][0-9]?)?$");

它也等价于以下内容:

Regex regexPrice = new Regex(@"^[0-9]+(\.[0-9]1,2)?$");

【讨论】:

【参考方案2】:

Match 方法在指定的输入字符串中搜索 Regex 中指定的正则表达式的第一次出现。所以 '12fsdf' 在提供的输入中匹配 12 并且您的方法返回成功值。因此,不要使用Match,而应使用Regex 的IsMatch 方法,该方法指示指定的正则表达式是否在指定的输入字符串中找到匹配项。

public bool priceRegex (string parameter)

    Regex regexPrice = new Regex(@"^[0-9]+(\.[0-9][0-9]?)?");
    return regexPrice.IsMatch(parameter);

【讨论】:

以上是关于在有效字符后输入无效字符时,正则表达式无法工作?的主要内容,如果未能解决你的问题,请参考以下文章

SQLite正则表达式用于查找字符串不在预定义集中的行

正则表达式检测无效的 UTF-8 字符串

当正则表达式有效且在其他地方工作时,带有“m”标志的 Javascript 正则表达式错误、“无效的正则表达式组”

表单输入实时反馈

Unicode 正则表达式;无效的 XML 字符

正则表达式正后面看起来不起作用?