Regex with mix quantifiers
我正在尝试使用RegEx验证批注在ASP.Net MVC应用程序中验证电话号码。
除了允许的字符和最大-最小长度,我想在文本中的任何地方最多允许2个空格。我已经尝试了以下RegEx,但无法正常工作。
1
| ^(\\+)?(\\d|\\s{0,2}|-|\\(|\\)){8,16}$ |
如果我在不验证空格数的情况下删除{0,2},效果很好。
我尝试了不同的组合,但是没有运气。
更新
" 1234 5 6"应该有效,但" 123 4 5 6"应该无效。
- 空格是否算作{8,16}字符之一?
-
适用于我的电话号码,例如1-123-456-7890,您要处理哪种电话格式?
-
如果不是,那么这就是您需要的^(?!.*\\s{3})(\\+)?(?:\\s*(\\d|-|[()])\\s*){8,16}$
-
@sln是的。 Dweeberly我还需要允许空格,但最多两个。
-
@Alpesh-最大为2,然后我刚刚发布了一个正则表达式。顺便说一句,空格被算作一个字符?你确定吗 ?
-
@sln我需要最小0到最大2个空格。是的,它们被算作8-16长度的一部分。那就是我要的。
-
@Alpesh-发表它,在这里回显。重新执行不将wsp视为字符的数学运算,使用其他最大范围。
-
尝试@"^(?!(?:\\S*\\s){3})(?=(?:\\D*\\d){8,16}\\D*$)\\+?[\\d\\s()-]+$"
-
@sln它适用于连续的空间,而不适用于分散的空间。
-
@WiktorStribi ?? ew可以正常工作,但是空格不算作最大最小长度(8-16)的一部分。从表达式中,我可以看到原因。但是不确定如何解决它。
-
{8,16}应该算什么?尝试^(?!(?:\\S*\\s){3})(?=.{8,16}$)\\+?[\\d\\s()-]+$
-
用示例更新了我的问题。到目前为止,感谢您的帮助。
-
更新了演示链接-regex101.com/r/gtPozk/4
-
@WiktorStribi ?? ew完美地工作。谢谢RegEx专家。您可以将其发布为答案,我会接受的。
-
@Alpesh-it works for consecutive spaces not for scattered spaces-^(?!.*\\s{3})\\+?(?:\\s*[\\d()-]\\s*){8,16}$我很确定您或者不知道正则表达式,没有尝试过,或者只是感觉很虚弱。
您可以考虑以下模式:
1
| ^(?!(?:\\S*\\s){3})(?=.{8,16}$)\\+?[\\d\\s()-]+$ |
请参阅正则表达式演示。
详细信息
-
^-字符串开始
-
(?!(?:\\S*\\s){3})-不允许有3个或更多空白字符
-
(?=.{8,16}$)-字符串长度必须在8到16之间(没有换行符,或者将.替换为[\\s\\S])
-
\\+?-可选的+
-
[\\d\\s()-]+-1个或多个数字,空格,(,),-
-
$-字符串的结尾。
- 如果我不想算为8-16长度的一部分,该怎么办?
-
@Wiktor Stribi ?? ew,您的答案适用于两个连续的空格,例如12346 7812345,但是据我了解,这应该是不正确的吗?
-
@Alpesh将其放在正则表达式的开头。
-
@HusseinGolshani禁止连续两个空格。规则是字符串中任何地方都可以使用0到2个空格。
-
@HusseinGolshani好点,但目前连续两个空格是可以的。我只是不想让用户输入太多空格。
-
@Alpesh,还添加(?:\\S*\\s{2})将防止上述答案中出现连续的空格。 ^(?!(?:\\S*\\s){3}|(?:\\S*\\s{2}))(?=.{8,16}$)\\+?[\\d\\s()-]+$
-
@HusseinGolshani要禁止连续的空格,请在^之后添加(?!.*\\s{2})。但是,也可以不进行环视。 ^(?!(?:\\S*\\s){3})(?=.{8,16}$)\\+?[\\d()-]+(?:\\s[\\d()-]+)*$