我的Laravel规则和正则表达式操作有一个小问题:
规则基本上是一个数组:
'room'=>'required|alpha_num|min:2|max:10',
我遇到的问题是当使用regex和|(或)运算符时,如:
'cid'=>'required|regex:/^((comp)|(soen)|(engr)|(elec))'d{3}$/i',
我得到一个服务器错误说:
ErrorException
preg_match(): No ending delimiter '/' found
我猜preg_match
停在/.../
内的第一个|
处。
是否有办法编写上面的代码使其工作?
完整代码:
public static $rules = array(
'cid' => array('required', 'regex:/^((comp)|(soen)|(engr)|(elec))'d{3}$/i'),
'description'=>'required|regex:/^[A-Za-z 't]*$/i|min:3|unique:courses',
'credits'=>'required|regex:/^'d+('.'d)?$/'
);
http://laravel.com/docs/validation#rule-regex
正则表达式:模式
要验证的字段必须匹配给定的正则表达式。
注意:当使用regex模式时,可能需要在数组中指定规则,而不是使用管道分隔符,特别是当正则表达式包含管道字符时。
澄清:你可以这样做
$rules = array('test' => array('size:5', 'regex:foo'));
您应该使用array
而不是使用|
分隔规则:
'cid' => array('required', 'regex:/^((comp)|(soen)|(engr)|(elec))'d{3}$/i')
管道(|
)叹号在正则表达式模式中可用,因此它与分隔符冲突。其他答案已经说明了。
我用这个样式救了我的命:-)
更改代码
$validator = Validator::make(
$request->all(),
[
'name' => 'required|string',
'initial_credit' => 'required|integer|between:0,1000000|regex:/[1-9][0-9]*0000$/'
]
]);
$validator = Validator::make(
$request->all(),
[
'name' => 'required|string',
'initial_credit' => [ // <=== Convert To Array
'required',
'integer',
'between:0,1000000',
'regex:/([1-9][0-9]*0000$)|([0])/' // <=== Use pipe | in regex
] // <=== End Array
]);