根据 phone 值正则表达式验证是否插入 +1

Validate insert +1 or not depending of phone value regex

我有一个正则表达式,所以我想在数字不是以它开头时加+1。如果它以 1 开头,它应该显示为 +1 然后 (###)-###-####

但是当数字以 1

开头时它抛出 1+1-(###)-###-####

表达式:

 var formattedShipperPhone = Regex.Replace(model.Shipper.ContactPhone, @"(?:\+1[\- /]?)?([2-9]\d{2})[\- /]?([2-9]\d{2})[\- /]?(\d{4})", "+1-()--");

我如何验证 1 是否已经存在?

我不喜欢在正则表达式中使用 .*,但在此示例中您可以尝试

".*([2-9]\d{2})[\- /]?([2-9]\d{2})[\- /]?(\d{4})"

并获得

"+1-()--"

在这种情况下,您将始终删除 (###)-###-#### 之前的内容,只需添加 +1

这是因为你在匹配 +1,如果没有加号,你也不会匹配 1,所以它保持不变并保留在替换中。

+ 可以是可选的,你不必转义 \-

例子

var strings = new List<string>() {
    "+1-288-388-4441",
    "+1288-388-4442",
    "1288-388-4443",
    "288-388-4444",
};
            
foreach (var s in strings)
{
    Console.WriteLine(
        Regex.Replace(
            s, 
            @"(?:\+?1[- /]?)?([2-9]\d{2})[- /]?([2-9]\d{2})[- /]?(\d{4})", 
            "+1-()--")
        );
}

输出

+1-(288)-388-4441
+1-(288)-388-4442
+1-(288)-388-4443
+1-(288)-388-4444