Issue with Laravel Rules & Regex (OR) operator

匿名 (未验证) 提交于 2019-12-03 02:46:02

问题:

I'm having a small issue with my Laravel rules and regex operation :

Basically a rule is an array as such :

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

The problem i'm having is when using regex and the | (or) operator such as :

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

I'm getting a server error saying :

ErrorException  preg_match(): No ending delimiter '/' found 

I'm guessing the preg_match is stopping at the first | inside the /.../.

Is there anyway to write the above code to make it work ?

Full code :

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

回答1:

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

regex:pattern

The field under validation must match the given regular expression.

Note: When using the regex pattern, it may be necessary to specify rules in an array instead >of using pipe delimiters, especially if the regular expression contains a pipe character.

To clarify: You would do something like this

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


回答2:

You should use an array instead of separating rules using |:

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

The pipe (|) sigh is available in your regular expression pattern so it's conflicting with the separator. Other answer already stated it.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!