preg_match акцентированные символы

1

Поэтому у меня проблема с использованием preg_match с php.

Я хочу, чтобы мои пользователи заполнили поле "Имя" только допустимыми символами. Пример: нет цифр или специальных символов.

Мой сайт, возможно, будет двуязычным, но большинство моих посетителей - французские канадцы

Я предпочитаю utf-8 для моего кодирования. Поэтому в верхней части моего документа у меня есть этот тег:

<meta charset="utf-8" />

Мне нужно принять акцентированные символы в моей форме, и я попробовал это:

(preg_match('/^\p{L}+$/ui',$string))

Но я не могу принять такой акцент.

Вот пример того, что имя может содержать как символы

jean-françois d'abiguäel

Это очень плохо, как могло бы

Кажется, что Evryone (preg_match('/^\p{L}+$/ui',$string)) работает, но я.

мне нужно что-то вроде этого:

/^\p{L}(\p{L}+[- ']?)*\p{L}$/ui

Но мне нужно заставить его работать.

Мои серверы - это IIS (godaddy). Версия PHP - это 5,4 часовой пояс по умолчанию для Америки/Монреаля

Спасибо!

  • 0
    вот настоящее имя, зачем его ломать?
  • 0
    Добавить ini_set('default_charset', 'UTF-8'); ,
Показать ещё 5 комментариев
Теги:
encoding

2 ответа

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

Эта модель должна работать:

/^\pL+(?>[- ']\pL+)*$/u

демонстрация

Но не стесняйтесь адаптировать его для более экзотических имен (например, имена с цитатой или апострофом).

  • 2
    OP regex тоже работает :)
  • 1
    @stribizhev: да, но мой работает лучше!
Показать ещё 10 комментариев
1
~^([\p{L}-\s']+)$~ui

Соответствует следующим именам:

  1. Жан-Франсуа д'Абигуэль
  2. Франсуа Холланд
  3. Père Noël

См. Демонстрационную версию regex 101.

  • 1
    Это регулярное выражение допускает пробелы на обоих концах. На самом деле, это позволяет --- - ---
  • 0
    @stribizhev --- - --- может быть чешское имя ...
Показать ещё 2 комментария

Ещё вопросы

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