Laravel Rules&Regex(OR)运算符问题

Jim*_*mmy 15 php regex laravel

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

基本上规则就是这样一个数组:

'room'=>'required|alpha_num|min:2|max:10',
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是使用正则表达式和| (或)运营商,例如:

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

我收到服务器错误说:

ErrorException

preg_match(): No ending delimiter '/' found
Run Code Online (Sandbox Code Playgroud)

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

);
Run Code Online (Sandbox Code Playgroud)

sto*_*ert 30

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

正则表达式:模式

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

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

澄清:你会做这样的事情

$rules = array('test' => array('size:5', 'regex:foo'));
Run Code Online (Sandbox Code Playgroud)


The*_*pha 6

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

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

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