Как я могу найти единственное вхождение нелатинского символа, используя регулярные выражения? - PullRequest
2 голосов
/ 14 июля 2010

Я использую регулярное выражение, чтобы увидеть, есть ли в строке один нелатинский символ.

$latin_check = '/[\x{0030}-\x{007f}]/u'; //This is looking for only latin characters


if(preg_match($latin_check, $_POST['full_name'])) { 
    $error = true;        
}

Это следует проверить, чтобы увидеть, присутствует ли хотя бы один символ,латинский персонаж.Если он не находит хотя бы одного нелатинского символа, он должен установить для $ error значение true.

Я думаю, что моя логика может быть неправильной.Как я могу найти единственное вхождение нелатинского символа, используя регулярные выражения в php?

Ответы [ 2 ]

3 голосов
/ 14 июля 2010

Ваше регулярное выражение (насколько я могу судить) будет соответствовать любому символу между шестнадцатеричными кодами \ x0030 и \ x007f, что противоположно тому, что вы хотите.Если вы хотите найти символы, которых нет в этом диапазоне (то есть - нелатинские символы), я думаю, вы захотите использовать класс символов с отрицанием:

$latin_check = '/[^\x{0030}-\x{007f}]/u';

Метасимвол '^'в классе символов регулярного выражения в основном означает «любые символы, не входящие в этот класс символов».

2 голосов
/ 14 июля 2010

Должно работать следующее:

if (preg_match('/[^\x30-\x7F]/', $_POST['full_name']) > 0)
{
    $error = true;
}

Вы можете использовать x20 вместо x30 в качестве нижней границы, если хотите принять пробел и следующие символы ASCII: !"#$%&'()*+,-./.

...