phone 数字的正则表达式 - 如何确保用户不会输入 +-*+-*+-*+-*?
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+)*$");
见demo
请注意,您可以使用量词限制连字符+数字的数量。比如说,可以有 none 或 1:
^[+*]?\d+(?:-\d+)?$"
^
如果超过 1 个,请使用限制量词:
^[+*]?\d+(?:-\d+){0,3}$"
^^^^^
此处,{0,3}
表示连字符+数字组重复0、1、2或3次。
^(?!(.*\+){2})(?!(.*-){2})(?!(.*\*){2})[0-9*+-]+$
您可以使用 lookaheads
来确保 special characters
仅出现 once
。查看演示。
您首先需要做的是确定模式到底是什么。这不需要在代码中。在您的示例中,我看到一个前导字符,后跟第一个数字组,然后是一个可选的破折号和第二个数字组。前导字符可以是 +、* 或 0。数字组是 1 到 9 之间的一位数字,后跟一位或多位 0 到 9 的数字。翻译每个元素给出:
组长:[+*0]
破折号:-
号码组:[1-9][0-9]+
将所有东西放在一起得到
[\+\*0][1-9][0-9]+(-[1-9][0-9]+)?
有些组可能有最小和最大长度,您仍然可以将 + 更改为 {min, max}。
我想允许用户仅输入如下模式:
+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+)*$");
见demo
请注意,您可以使用量词限制连字符+数字的数量。比如说,可以有 none 或 1:
^[+*]?\d+(?:-\d+)?$"
^
如果超过 1 个,请使用限制量词:
^[+*]?\d+(?:-\d+){0,3}$"
^^^^^
此处,{0,3}
表示连字符+数字组重复0、1、2或3次。
^(?!(.*\+){2})(?!(.*-){2})(?!(.*\*){2})[0-9*+-]+$
您可以使用 lookaheads
来确保 special characters
仅出现 once
。查看演示。
您首先需要做的是确定模式到底是什么。这不需要在代码中。在您的示例中,我看到一个前导字符,后跟第一个数字组,然后是一个可选的破折号和第二个数字组。前导字符可以是 +、* 或 0。数字组是 1 到 9 之间的一位数字,后跟一位或多位 0 到 9 的数字。翻译每个元素给出:
组长:[+*0]
破折号:-
号码组:[1-9][0-9]+
将所有东西放在一起得到
[\+\*0][1-9][0-9]+(-[1-9][0-9]+)?
有些组可能有最小和最大长度,您仍然可以将 + 更改为 {min, max}。