问题
Im wokring on Laravel 4.2. Im trying to use validator to validate a name field with regex here is my rule below:
public static $rules_save = [
'name' => 'required|regex:/[XI0-9/]+/|unique:classes'
];
But as soon as I call the rule to be validated an error is thrown see below:
preg_match(): Unknown modifier ']'
In the following location:
protected function validateRegex($attribute, $value, $parameters)
{
$this->requireParameterCount(1, $parameters, 'regex');
return preg_match($parameters[0], $value); // **ON THIS LINE**
}
回答1:
Since you need to include a /
into the character class, you need to either esacpe it:
'name' => 'required|regex:/[XI0-9\/]+/|unique:classes'
^
Or use other regex delimiters.
When using the PCRE functions, it is required that the pattern is enclosed by delimiters. A delimiter can be any non-alphanumeric, non-backslash, non-whitespace character.
Often used delimiters are forward slashes (
/
), hash signs (#
) and tildes (~
).
回答2:
As the first poster(stribizhev) pointed out, you need to escape the forward slash /
, and this is because the backslash /
is used as a delimiter in that pattern. Therefore, making it to act like a special character within the character class.
Therefore your pattern should be like this
/[XI0-9\/]+/
But if you make use of other delimiters e.g #
, then there would be no need to escape the forward slash.
#[XI0-9/]+#
here, i didn't escape the forward slash because i used #
as a delimiter
Hope this helps.
For more info, check out the link posted by stribizhev.
来源:https://stackoverflow.com/questions/32807517/laravel-preg-match-unknown-modifier