C#正则表达式帮助 - 验证输入

5
我需要验证用户输入的文本格式是否为:

####-#####-####-###

我可以使用Regex.Match吗?

1个回答

7
我会这样做:
private static readonly Regex _validator = 
    new Regex(@"^\d{4}-\d{5}-\d{4}-\d{3}$", RegexOptions.Compiled);
private static bool ValidateInput(string input)
{
    input = (input ?? string.Empty);
    if (input.Length != 19)
    {
        return false;
    }
    return _validator.IsMatch(input);
}

这不仅适用于数字吗?确实,问题并没有明确指定“文本”是什么。 - Liviu Mandras
@Liviu - 我通常将 # 解释为数字占位符。 - ChaosPandion
为什么要费力地检查长度并进行多次返回呢?预编译的正则表达式操作是否如此昂贵,以至于不值得这样做?我会让它失败正则表达式并使方法更简单。但是,我确实喜欢你使用\d而不是[0-9]。 - dstarh
@dstarh - 我认为检查长度并不麻烦。这是一种非常简单的验证输入的方法。在高吞吐量的过程中,它也可以提高性能。*(我承认提升的不是很多。)* - ChaosPandion
@ChaosPandion: 这不是关于转义 HYPHEN-MINUS 字符的问题;而是要接受任何破折号字符。顺便说一下,那个\u002d 让我以为 C♯ 可能会像 Java 一样存在 UTF-16 设计上的错误,导致代理码点出现问题。您是否知道 C♯ 是否存在这些问题? - tchrist
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接