Проверка регулярных выражений для UTF8 / многобайтовых символов языка (включая китайский и т. Д.), Но не специальных символов, таких как {/ * - PullRequest
2 голосов
/ 26 августа 2010

Используя PHP / MySQL, все закодированные как UTF, нам недавно пришлось начинать сбор нелатинских символов, таких как китайский и т. Д. У нас есть проверка PHP, которая проверяет длину строки и буквенно-цифровые значения, такие как:

if (!ereg("[[:alnum:]]{2,}",$_POST['company_name'])) {
    //error code here
}

Это не работает с многобайтовыми символами.Я понимаю, что длина является проблемой (один символ не равен одному байту), но я надеялся, что кто-то может предоставить ссылку / решение для сопоставления строки только для символов языка UTF8, НЕТ специальных символов, таких как [*/ и т. Д.

РЕДАКТИРОВАТЬ: я хочу принять только строку длиной xx, которая содержит только языковые символы alebit английский / китайский и т. Д., А НЕ какие-либо специальные символы *{/ и т. Д. Надеюсь, это прояснит.

Ответы [ 3 ]

1 голос
/ 26 августа 2010

Ваши требования немного расплывчаты, но вы можете применять только буквы (возможно, в сочетании с метками) и десятичные числа с

if (!preg_match('/^[\p{L}\p{M}\p{Nd}]{2,}$/u', $_POST['company_name'])) {
   //error here
}
0 голосов
/ 26 августа 2010

Вы можете попытаться сопоставить с \p{L}|\p{N}, но вам нужно добавить опцию u к вашему регулярному выражению.

Источники:
www.regular-expressions.info

0 голосов
/ 26 августа 2010

Расширение PHP mbstring имеет функцию mb_ereg () , это, вероятно, будет хорошей отправной точкой, я думаю.

...