我试图在PHP Laravel中为用户名字段编写验证检查,其功能是让用户知道出了什么问题。我有一些带有正则表达式检查的if语句,但它不起作用。正则表达式的要求是:不能以"。"开头,不超过1"。"连续,没有大写,只有a-z,没有特殊字符。所以例如像这样" user.name"是有效的,但像"用户名。"或" .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",程序反馈应该是"不允许在字符串前面的点"。
答案 0 :(得分:2)
您所要做的就是为验证添加自定义消息。
$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...']);