У меня небольшая проблема с моими правилами 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)?$/' );
http://laravel.com/docs/validation#rule-regex
регулярное выражение: шаблон
Поле под проверкой должно соответствовать данному регулярному выражению.
Примечание. При использовании шаблона регулярного выражения может потребоваться указать правила в массиве вместо> использования разделителей каналов, особенно если регулярное выражение содержит символ канала.
Чтобы уточнить: вы сделали бы что-то подобное
$rules = array('test' => array('size:5', 'regex:foo'));
Вы должны использовать array
вместо разделения правил, используя |
:
'cid' => array('required', 'regex:/^((comp)|(soen)|(engr)|(elec))\d{3}$/i')
Уровень вздутия трубы ( |
) доступен в вашем шаблоне регулярных выражений, поэтому он противоречит разделителю. Другой ответ уже заявил об этом.