No ending delimiter. PHP
Есть входная строка, которую нужно определить либо в латинский массив, либо в кириллический. Вот так я проверяю на то, какие символы содержит строка и определяю язык:
if(preg_match("^\p{Latin}+$", $key)){
array_push($en, $key);
}
else{
array_push($ru, $key);
}
Но мне прилетает следующий warning: PHP Warning: preg_match(): No ending delimiter '^'.
Подскажите где косяк.
Ответы (1 шт):
Регулярные выражения в PHP необходимо использовать внутри разделителей. Это либо парные символы (кавычки, скобки), либо какой-нибудь символ (часто используют обратный слеш, так как только этот символ используется в JavaScript, и многие к нему привыкли).
В данном случае выражение ^\p{Latin}+$ не содержит разделителей, однако символ ^ (здесь обозначающий начало строки) был определён PHP как начальный разделитель, а соответственно, PHP ожидал этот же символ в конце строки. Так как его там нет, PHP выдаёт ошибку.
Используйте разделители, а также модификатор u в данном случае, так как вы работаете не только с символами ASCII:
$key = "WiktorStribiżew";
if(preg_match("~^\p{Latin}+$~u", $key)){
echo "$key is valid!";
} else {
echo "$key is invalid!";
}
// => WiktorStribiżew is valid!
См. пример работы кода на PHP. Тут разделители ~.