Regex 带有+;或-字符
我希望验证一组电话号码,并允许向电话号码中添加+字符或-字符,但可选,电话号码总位数不需要设置为10位数。 用CakePHP。我该怎么做 有效输入的示例: 0165561125 0165542512 +0165515241Regex 带有+;或-字符,regex,cakephp,Regex,Cakephp,我希望验证一组电话号码,并允许向电话号码中添加+字符或-字符,但可选,电话号码总位数不需要设置为10位数。 用CakePHP。我该怎么做 有效输入的示例: 0165561125 0165542512 +0165515241 +016-5512412您可以尝试以下正则表达式 \+?\d{3}[- ]?\d{7} \+?查找+并将其设置为可选。 \d{3}查找三位数字。 [-]?查找-或空格(可选)。注意比?使前面的字符可选。 \d{7}查找剩余的7位数字 正如您所提到的,您的电话号码中可以有
+016-5512412您可以尝试以下正则表达式
\+?\d{3}[- ]?\d{7}
\+?
查找+
并将其设置为可选。\d{3}
查找三位数字。[-]?
查找-
或空格(可选)。注意比?使前面的字符可选。\d{7}
查找剩余的7位数字
正如您所提到的,您的电话号码中可以有任意数量的空格或-您可以使用以下正则表达式:
\+?(\d+[ -]?)+
您可以尝试以下方法:
^\+?\d{3}[ -]?\d{7}$
这将匹配:
- 开头有一个可选的
+
- 后面紧跟三位数字
- 后跟一个可选空格或
-
- 后面紧跟着另外七个数字
但是,如果“电话号码总位数不需要设置为10位数”意味着您不想限制位数(或指定确切的位数),则可以将正则表达式更改为:
^\+?\d+[ -]?\d+$
这将匹配:
- 开头有一个可选的
+
- 后跟至少一个数字
- 后跟一个可选空格或
-
- 后跟至少一个以上的数字
此外,如果您想在任何地方接受空格和连字符,我会执行以下操作:
^(\+|\+ )?\d+([ -]?\d+)*$
这将匹配:
- 开头的可选
(可选后跟空格)+
- 至少一位数字
- 零组或多组(空格或连字符,后跟至少一个数字)
^
和$
。很好。我试图使用您的代码,但不幸,警告(512):找不到生成的验证处理程序?模型是否验证为->'phone'=>array('rule'=>array('^\+?\d+[-]?\d+$),是否正确?我相信它将是'rule'=>array('custom','^…$)
。否则它将查找名为“^\+?\d+[-]?\d+$”的规则这也没错。当我在其中放入一个notempty数组时。作为phone'=>array('notempty'=>array('rule'=>array('custom','^…$),),)和warning show:warning(2):preg_match():没有结束分隔符'^'发现您可能会遇到反斜杠地狱?尝试将每个反斜杠加倍(一个用于逃避反斜杠本身,另一个用于正则表达式):^(\\+\\+)?\\d+([-]?\\d+*$
这种语法看起来也很奇怪。你不想要类似于'phone'=>数组('notEmpty'=>数组('rule'=>'notEmpty'),'mask'=>数组('rule'=>数组('custom','^…$)
)的东西吗?请参阅