Regex 带有+;或-字符

Regex 带有+;或-字符,regex,cakephp,Regex,Cakephp,我希望验证一组电话号码,并允许向电话号码中添加+字符或-字符,但可选,电话号码总位数不需要设置为10位数。 用CakePHP。我该怎么做 有效输入的示例: 0165561125 0165542512 +0165515241 +016-5512412您可以尝试以下正则表达式 \+?\d{3}[- ]?\d{7} \+?查找+并将其设置为可选。 \d{3}查找三位数字。 [-]?查找-或空格(可选)。注意比?使前面的字符可选。 \d{7}查找剩余的7位数字 正如您所提到的,您的电话号码中可以有

我希望验证一组电话号码,并允许向电话号码中添加+字符或-字符,但可选,电话号码总位数不需要设置为10位数。 用CakePHP。我该怎么做

有效输入的示例:

0165561125

0165542512

+0165515241


+016-5512412

您可以尝试以下正则表达式

\+?\d{3}[- ]?\d{7}

\+?
查找
+
并将其设置为可选。
\d{3}
查找三位数字。
[-]?
查找
-
或空格(可选)。注意比?使前面的字符可选。
\d{7}
查找剩余的7位数字



正如您所提到的,您的电话号码中可以有任意数量的空格或-您可以使用以下正则表达式:

\+?(\d+[ -]?)+

您可以尝试以下方法:

^\+?\d{3}[ -]?\d{7}$
这将匹配:

  • 开头有一个可选的
    +
  • 后面紧跟三位数字
  • 后跟一个可选空格或
    -
  • 后面紧跟着另外七个数字

但是,如果“电话号码总位数不需要设置为10位数”意味着您不想限制位数(或指定确切的位数),则可以将正则表达式更改为:

^\+?\d+[ -]?\d+$
这将匹配:

  • 开头有一个可选的
    +
  • 后跟至少一个数字
  • 后跟一个可选空格或
    -
  • 后跟至少一个以上的数字

此外,如果您想在任何地方接受空格和连字符,我会执行以下操作:

^(\+|\+ )?\d+([ -]?\d+)*$
这将匹配:

  • 开头的可选
    +
    (可选后跟空格)
  • 至少一位数字
  • 零组或多组(空格或连字符,后跟至少一个数字)

你有没有尝试过编写任何类型的正则表达式?我只是在正则表达式生成器上尝试过,但那是javascript代码生成器显示这个/\d\+\-/我试着像这样改变:'phone'=>array('rule'=>array('/d[\+\-]/')),但我不想为输入设置一个数字范围。如果我需要输入+65 553 4730?那么这是如何工作的呢?在创建正则表达式之前,最好使用一些指定的格式。较大的变化可能会导致很大的冲突。但是,我如何在模型中声明?这是我的方式,如果有问题,请尝试修复我错误。phone'=>array('notempty'=>array('rule'=>array('custom','\+?(\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','^…$)
)的东西吗?请参阅