0
Match match = Regex.Match("555-5555555", "^(\\d{3}\\-?\\d{3}\\-?\\d{4})$", RegexOptions.None);
it["Should match"] = () => match.Success.should_be_true();

我相信以上应该匹配。我需要数字,但将连字符保留为可选。但是,上面返回 false 并且测试失败。

编辑

接受的答案是 Darin 是对的,我的测试范围有问题。这是我通过的更新代码:

Match match;
    void describe_example()
    {

        context["goodregex"] = () =>
        {
            before = () => match = Regex.Match("555-5555555", "^(\\d{3}\\-?\\d{3}\\-?\\d{4})$", RegexOptions.None);
            it["Should match"] = () => match.Success.should_be_true();
        };

        context["badregex"] = () =>
        {
            before = () => match = Regex.Match("555-5525-5555", "^(\\d{3}\\-?\\d{3}\\-?\\d{4})$", RegexOptions.None);
            it["Should not match"] = () => match.Success.should_be_false();
        };

    }
4

3 回答 3

1

您的 RegEx 在我的机器上正常工作。对于验证不同类型电话号码的正则表达式,请查看此处(您可以与您的需求进行比较并选择最合适的一个):

http://www.regexlib.com/Search.aspx?k=phone&AspxAutoDetectCookieSupport=1

于 2012-06-18T15:33:55.643 回答
1

以下程序打印为真:

class Program
{
    static void Main()
    {
        var match = Regex.Match("555-5555555", "^(\\d{3}\\-?\\d{3}\\-?\\d{4})$", RegexOptions.None);
        Console.WriteLine(match.Success);
    }
}

我猜您在单元测试中遇到了一些范围界定问题,在match同时运行测试时变量正在被修改。

于 2012-06-18T15:35:59.357 回答
0

正则表达式对我来说看起来不错。事实上match.Success,在我的机器上也是如此。我可能会将正则表达式重写为:

"^(\\d{3}\\-?){2}\\d{4}$"

然而,这只是一个偏好问题。

于 2012-06-18T15:34:36.377 回答