【问题标题】:Validate a phone number in Laravel在 Laravel 中验证电话号码
【发布时间】:2019-02-12 00:23:27
【问题描述】:

我将如何在 laravel 中验证一个数字。

我需要按以下格式存储的号码 353861111111。

353 将是前缀,其余部分由用户键入。如果用户输入086,则无效。

【问题讨论】:

  • 是错字还是应该是 12 位数字?
  • 我更新了我的答案,我相信这是您正在寻找的正则表达式。

标签: laravel forms validation laravel-5


【解决方案1】:

试试这个正则表达式:

'number' => 'required|regex:^[3][5][3][\d]{8}[\d]$'

【讨论】:

  • 这个正则表达式完全错误。例如,它匹配 333000000000 - 错误的前缀,错误的字符数。 regex101.com/r/L3YBKV/1
  • @Don'tPanic 我更新了正则表达式。只允许 12 个整数,前三个必须是 353。
  • 不,还是大错特错。你测试了吗? [353] 是一个字符类,它意味着匹配任何这些字符 - 所以 333 仍然匹配,或者 555 或 355 等。[\d] 没有意义 - 十进制数的字符类与十进制数相同,或\d。为什么指定 8 位小数后跟一个小数?你有很多关于正则表达式、蚱蜢的知识:-)
  • @Don'tPanic 好的,我再次编辑它。测试了一下,觉得现在效果不错。
  • 如果您想精确匹配353,则无需制作数字模式——这对匹配引擎来说毫无意义。 353 就是您所需要的。我上次描述的其他问题仍然存在。简单的^353\d{9}$怎么样?
【解决方案2】:

您可以将正则表达式用作:

'phone' => 'required|regex:/(353)[0-9]{9}/'

这会检查以353 开头的模式,然后是9 数字,其值来自0-9

或者您可以在AppServiceProvider.php的引导方法中构建自定义验证器:

Validator::extend('phone_number', function($attribute, $value, $parameters)

    {
        return substr($value, 0, 3) == '353';
    });

这将允许您在应用程序的任何地方使用 phone_number 验证规则,因此您的表单验证可以是:

'phone' => 'required|numeric|phone_number|size:11'

在您的验证器扩展中,您还可以检查 $value 是否为数字和 11 字符长。

【讨论】:

    【解决方案3】:

    这是我在一个需要不时更新的旧 Laravel 4 项目中的做法:

    'phone' => 'required|regex:/^\d{3}-\d{3}-\d{4}$/',
    

    【讨论】:

      猜你喜欢
      • 2021-10-03
      • 2012-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 2020-02-29
      相关资源
      最近更新 更多