PHP - проверка символов Юникода - не работает с переводами строки?

0

Я пытаюсь написать PHP-скрипт для некоторой проверки формы. Одним из требований к текстовому вводу является то, что он должен содержать хотя бы один символ Юникода. Я написал эту функцию, чтобы проверить это.

function containsLetters($str)
{
    return preg_match('/\p{L&}+/', $str);
}

Казалось, что это отлично работает для первых двух тестовых примеров, которые я написал для этого. Но затем я попытался проверить его на строку "\n", ожидая ложного результата. Вместо этого он, похоже, полностью разбился.

Я тоже пробовал это:

var $test = preg_match('/\p{L&}+/', "\n");
var_dump($test);

который также не работает.

  • 0
    показывает ошибку regex101.com/r/iL7jL1/1
  • 1
    Хм. Я получил это из регулярных выражений.info/unicode.html . Там написано «\ p {L &} или \ p {Cased_Letter}: буква, которая существует в строчных и прописных вариантах (комбинация Ll, Lu и Lt)».
Теги:
unicode
newline

1 ответ

2
Лучший ответ

Во второй попытке вы пытаетесь назначить вызов переменной, не...

var_dump(preg_match('/\p{L&}/', "\n")); // int(0)

Кроме того, вы можете просто использовать \pL вместо этого и обязательно включить модификатор u (unicode)...

function containsLetters($str) {
    return (bool) preg_match('~\pL~u', $str);
}
  • 0
    Хорошо, имеет смысл. Это работает и для меня. Тем не менее, я попытался сделать var_dump (containsLetters ("\ n")); который не работал. Есть идеи?
  • 1
    Прости, неважно. Вы правы, это была ошибка с использованием моих скобок.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню