【问题标题】:International phone number validation regex issue in Laravel [closed]Laravel中的国际电话号码验证正则表达式问题[关闭]
【发布时间】:2020-07-10 12:20:57
【问题描述】:

这是我用于国际电话号码验证的正则表达式

\+(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|
                    2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|
                    4[987654310]|3[9643210]|3[70]|7|1)\d{1,14}$

上述格式验证所有号码,除了南苏丹的国际代码 +211 国家代码

以下是我对手机号码的完整验证规则,

'mobile' => ['required', 'string','min:11','max:14', 'regex:/\+(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|
                    2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|
                    4[987654310]|3[9643210]|3[70]|7|1)\d{1,14}$/'],

我缺少什么,这是 Laravel 中一个好的国际手机号码验证规则吗?

【问题讨论】:

  • 2[98654321]\d 处理 211 但它前面似乎有空格,所以正则表达式引擎会尝试匹配它。您应该对整个2[98654321]\d 块以及4[987654310] 有问题,这将有同样的问题。
  • 不,删除所有空格仍然收到错误消息,移动格式无效。
  • 'mobile' => ['required', 'string','min:11','max:14', 'regex:/\+(9[976]\d|8[ 987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210 ]|5[87654321]|4[987654310]|3[9643210]|3[70]|7|1)\d{1,14}$/'],
  • 你测试的是什么输入?
  • @VLAZ +211770757180,即自动扣除“+”号

标签: php regex laravel validation laravel-6


【解决方案1】:

我经常使用Laravel-Phone package,因为至少在我看来,这是验证和格式化电话号码的最简洁方式。

$request->validate([
    'phone' => [
        'required',
        Rule::phone()->detect()->country('GB'),
    ],
]);

要格式化电话号码,例如要保存到数据库或进行比较,请使用一致的表单

PhoneNumber::make('020 123456', 'GB')->formatE164(); // returns +4420123456

【讨论】:

  • 完美,感谢您的建议
猜你喜欢
  • 2022-07-22
  • 1970-01-01
  • 2019-05-30
  • 2011-05-08
  • 1970-01-01
  • 2017-03-23
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
相关资源
最近更新 更多