Laravel Rules& amp;正则表达式(OR)运算符

时间:2014-03-23 20:23:29

标签: php regex laravel

我的Laravel规则和正则表达式操作存在一个小问题:

基本上规则是一个数组:

'room'=>'required|alpha_num|min:2|max:10',

我遇到的问题是使用正则表达式和| (或)运算符如:

'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)?$/'

);

3 个答案:

答案 0 :(得分:28)

http://laravel.com/docs/validation#rule-regex

  

正则表达式:图案

     

验证字段必须与给定的正则表达式匹配。

     

注意:使用正则表达式模式时,可能需要在数组中指定规则,而不是使用管道分隔符,尤其是正则表达式包含管道符时。

澄清: 你会做这样的事情

$rules = array('test' => array('size:5', 'regex:foo'));

答案 1 :(得分:6)

您应使用array而不是使用|分隔规则:

'cid' => array('required', 'regex:/^((comp)|(soen)|(engr)|(elec))\d{3}$/i')

管道(|)叹息在您的正则表达式模式中可用,因此它与分隔符冲突。其他答案已经说明了。

答案 2 :(得分:0)

我使用这种风格并挽救了生命:-)

更改代码
    $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
    ]);