【问题标题】:Validiation check in Laravel phpLaravel php中的验证检查
【发布时间】:2016-03-01 12:34:30
【问题描述】:

我正在尝试在 PHP Laravel 中为用户名字段编写验证检查,该字段具有让用户知道出了什么问题的功能。我有几个带有正则表达式检查的 if 语句,但它不起作用。正则表达式的要求是:不能以“.”开头,不能超过1个“.”。连续,没有大写字母,只有 a-z,没有特殊字符。因此,例如像这样的“user.name”是有效的,但是像“username”这样的东西。或“.username”都将无效。 到目前为止,我得到了这个:

 $oValidator = Validator::make(Input::all(), [
            'username' => 'required|regex:/^[a-zA-Z0-9][\w\.]+[a-zA-Z0-9]$/',
            'username' => 'required',
            'password' => 'required',
            'firstname' => 'required',
            'lastname' => 'required',
            'email' => 'required|email'
        ]);

我想对用户犯的错误进行反馈,例如:用户输入是“.username”,程序反馈应该是“不允许在字符串前加点”。

【问题讨论】:

  • 我需要让用户知道哪里出了问题。我也可以使用这条线 if (!preg_match("/^[a-z]+[.]?[a-z]+$/", $name)) { echo "some msg"} 但是用户又不会知道出了什么问题。
  • 感谢您的帮助,我已经尝试过了,效果很好:'username' => 'required|regex:/^[a-zA-Z0-9][\w\. ]+[a-zA-Z0-9]$/',但我想告诉用户如果他们犯了错误,出了什么问题,比如如果他们插入“.username”,程序会在开始时向用户显示通知带有“。”的字符串不允许

标签: php regex laravel


【解决方案1】:

您所要做的就是为您的验证添加一条自定义消息。

 $this->validate($request, [
        'username' => 'required|regex:/^[a-zA-Z0-9][\w\.]+[a-zA-Z0-9]$/',
    ], ['regex' => 'Username cannot start with period(.), etc...]);

您的代码应如下所示。请记住,正则表达式自定义消息也将应用所有这些字段,而不仅仅是用户名,所以我会像上面一样单独验证用户名。

$oValidator = Validator::make(Input::all(), [
        'username' => 'required|regex:/^[a-zA-Z0-9][\w\.]+[a-zA-Z0-9]$/',
        'username' => 'required',
        'password' => 'required',
        'firstname' => 'required',
        'lastname' => 'required',
        'email' => 'required|email'
    ], ['regex' => 'Username cannot start with period, etc...']);

【讨论】:

  • 绝望让我这样做: if (!preg_match('/^[a-z][\w\.]+[a-z]$/', $name)) { $nameErr = "无效的用户名, 用户名不能以点\".\"开头,用户名不能包含大写和特殊字符。"; } 但你的答案很完美。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
  • 2014-10-23
  • 2015-02-28
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
相关资源
最近更新 更多