Cra*_*yWu 6 php laravel eloquent
域名有什么具体规则吗?谷歌搜索大约一个小时,但没有获得规则列表.我已经尝试了,"domain" => "required|url"但它正在要求它中的协议类型,所以它不是我的最佳选择.
Rob*_*ert 11
我使用自定义规则来检查有效的FQDN.
从另一个答案@ SO获得正则表达式,请参阅:完全限定域名称验证
其中一个答案提供了一个正则表达式,例如:
/^(?!:\/\/)(?=.{1,255}$)((.{1,63}\.){1,127}(?![0-9]*$)[a-z0-9-]+\.?)$/i
Run Code Online (Sandbox Code Playgroud)
通过演示:http://regexr.com/3g5j0向您显示匹配项.
Laravel 5.5
然后我创建了一个自定义规则:
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class FQDN implements Rule
{
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
return preg_match('/^(?!:\/\/)(?=.{1,255}$)((.{1,63}\.){1,127}(?![0-9]*$)[a-z0-9-]+\.?)$/i', $value);
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'Invalid FQDN.';
}
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
// ...
use App\Rules\FQDN;
// ...
$this->validate($request, [
// other rules be here
'fqdn' => [
'required',
new FQDN(),
],
]);
Run Code Online (Sandbox Code Playgroud)
编辑Laravel 5.4
在Laravel 5.4中,您没有规则合同,您可以在AppServiceProvider中扩展验证器,请参阅此处(或创建单独的ExtendedValidationServiceProvider).
你可以内联这样做,但我更喜欢为此设置单独的类.
在ServiceProvider引导方法中,添加:
use Illuminate\Support\Facades\Validator;
// ...
public function boot()
{
Validator::extend('fqdn', 'App\Rules\FQDN@validate');
Validator::replacer('fqdn', 'App\Rules\FQDN@replace');
}
Run Code Online (Sandbox Code Playgroud)
Validator::extend() 用于验证规则
Validator::replacer() 用于错误消息
然后是5.4规则类:
<?php
namespace App\Rules;
class FQDN
{
public function validate($attribute, $value, $parameters, $validator)
{
return preg_match('/^(?!:\/\/)(?=.{1,255}$)((.{1,63}\.){1,127}(?![0-9]*$)[a-z0-9-]+\.?)$/i', $value);
}
public function replace($message, $attribute, $rule, $parameters)
{
return str_replace(':fqdn', implode(', ', $parameters), $message);
}
}
Run Code Online (Sandbox Code Playgroud)
现在您可以使用以下验证:
$this->validate($request, [
// other rules be here
'fqdn' => [
'required',
'fqdn',
],
]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3126 次 |
| 最近记录: |