【问题标题】:phone number regex with + or - characters带有 + 或 - 字符的电话号码正则表达式
【发布时间】:2013-03-25 06:52:57
【问题描述】:

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

有效输入示例:

0165561125

016 5542512

+016 5515241

+016-5512412

【问题讨论】:

  • 您是否尝试过编写任何类型的正则表达式?
  • 我刚刚在正则表达式生成器上尝试了这个,但那是 javascript 代码生成器给我看这个 /\d|\+|-/ 我试着把它改成这样:'phone' =>数组('规则' => 数组('/d[\+\-]/'),

标签: regex cakephp


【解决方案1】:

你可以试试下面的正则表达式。

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


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



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

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

【讨论】:

  • 但我不想为输入设置数字范围。如果我需要输入 +65 553 4730 ?那么这怎么可能呢?
  • 在制作正则表达式之前最好有一些指定的格式。较大的变化将导致违规的可能性很大。
  • 好吧,但我是如何在模型中声明的?这是我的方式,如果出现问题,请尝试修复我。 phone' => array('notempty' => array('rule' => array('custom','\+?(\d+[ -]?)+'), ), ),
  • 老实说,我对这种语言不太了解,我只能帮助你处理正则表达式。请注意一件事,您可能需要分别在正则表达式的开头和结尾放置开始和结束锚点,即 ^$
【解决方案2】:

您可以尝试以下方法:

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

这将匹配:

  • 开头的可选+
  • 紧跟三位数字
  • 后跟一个可选空格或-
  • 后跟正好七位数

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

^\+?\d+[ -]?\d+$

这将匹配:

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

此外,如果您想在任何地方接受空格和连字符,我会这样做:

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

这将匹配:

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

【讨论】:

  • 很好。我试图使用你的代码,但不幸的是,警告(512):找不到验证处理程序已生成?模型是否验证为 -> 'phone' => array('rule' => array('^\+?\d+[ -]?\d+$'),是正确的方法吗?
  • 我相信它会是'rule' => array('custom', '^...$')。否则它将寻找规则 named "^\+?\d+[ -]?\d+$"
  • 这也没错。当我将一个空数组放入其中时。 as phone' => array('notempty' => array('rule' => array('custom','^.....$'), ), ) 和警告显示:警告 (2): preg_match (): 未找到结束分隔符 '^'
  • 您可能遇到了反斜杠地狱?尝试将每个反斜杠加倍(一个用于转义反斜杠本身,一个用于正则表达式):^(\\+|\\+ )?\\d+([ -]?\\d+)*$
  • 这种语法看起来也很奇怪。你不想要'phone' => array('notEmpty' => array('rule' => 'notEmpty'), 'mask' => array('rule' => array('custom', '^...$'))) 之类的东西吗?见book.cakephp.org/2.0/en/models/data-validation.html
猜你喜欢
  • 1970-01-01
  • 2015-09-17
  • 2019-09-10
  • 2013-04-14
  • 2017-09-23
  • 2014-02-15
  • 1970-01-01
相关资源
最近更新 更多