电话号码的正则表达式 - 如何确保用户不会放+ - *+ - *+ - *+ - *?

JAN*_*JAN -1 .net c# regex visual-studio

我想允许用户只输入以下模式:

9720545455454

056565656345

03-43434344

0546-4234234

*9090

+ 97203-0656534

意思是,我不想让用户一起乱搞一切,比如:

+ 954-4343 + 3232*4343 + -

+ -4343- + 5454 + 9323 + 234

我该如何修复这个模式

public static bool IsPhoneNumberCorrect(string phoneNumber)
{
    return Regex.IsMatch(phoneNumber, @"^[0-9*+-]+$");
}
Run Code Online (Sandbox Code Playgroud)

为了这个目的?

Wik*_*żew 5

如果您不关心数字组长度,您可以允许+*仅在开头,然后匹配初始数字,然后匹配连字符+数字的可选组:

return Regex.IsMatch(phoneNumber, @"^[+*]?\d+(?:-\d+)*$");
Run Code Online (Sandbox Code Playgroud)

演示

请注意,您可以使用量词限制连字符+数字的数量.说,可以没有或1:

^[+*]?\d+(?:-\d+)?$"
                 ^
Run Code Online (Sandbox Code Playgroud)

另一个演示

如果可以超过1,请使用限制量词:

^[+*]?\d+(?:-\d+){0,3}$"
                 ^^^^^
Run Code Online (Sandbox Code Playgroud)

这里,{0,3}表示连字符+数字组的重复0,1,2或3次.