Laravel 中的国际 phone 号码验证正则表达式问题

International phone number validation regex issue in Laravel

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

\+(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 中的一个很好的国际手机号码验证规则吗?

我经常使用 Laravel-Phone package,因为至少在我看来,这是验证和格式化 phone 数字的最干净的方法。

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

要格式化 phone 数字,例如,为了保存到数据库或进行比较,使用一致的格式,请使用

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