繁体   English   中英

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

[英]Regex of phone number - how to make sure the user won't put +-*+-*+-*+-*?

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

+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*+-]+$");
}

为了这个目的?

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

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

观看演示

请注意,您可以使用量词限制连字符+数字的数量。 说,不能有一个或一个:

^[+*]?\d+(?:-\d+)?$"
                 ^

观看另一个演示

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

^[+*]?\d+(?:-\d+){0,3}$"
                 ^^^^^

此处, {0,3}表示连字符+数字组的0、1、2或3个重复。

^(?!(.*\+){2})(?!(.*-){2})(?!(.*\*){2})[0-9*+-]+$

您可以lookaheads使用以确保special characters仅出现once参阅演示。

https://regex101.com/r/vV1wW6/1

您首先需要做的就是确定模式到底是什么。 不需要在代码中。 在您的示例中,我看到一个前导字符,后跟第一个数字组,然后是可选的破折号和第二个数字组。 前导字符可以是+,*或0。数字组是1到9之间的一位数字,后跟一个或多个0到9数字。转换每个元素将得到:

组长:[+ * 0]

破折号:-

号码组:[1-9] [0-9] +

把所有东西都扔在一起

[\+\*0][1-9][0-9]+(-[1-9][0-9]+)?

某些组可能具有最小和最大长度,您仍然可以将+更改为{min,max}。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM