2013-04-29 2 views
0

Я пытаюсь сопоставить имена и фамилии с чем-то вроде этого.JavaScript/PHP Regular Expression

$pattern = '/[a-zA-Z\-]{3,30} +[a-zA-Z]+/'; 

Это прекрасно работает, за исключением того, когда у меня есть имя, как этот Mélissa Smith

Мой партнер становится Lissa Smith

Как подстать все специальные символы, такие как é

+0

А как насчет имен, как этот (голландский пример): 'Jeroen van den Hoogen'? Должны ли вы программировать, чтобы справиться с этим? – Aquillo

ответ

1

в JavaScript, вы можете использовать диапазон Юникода обугленного вместо A-Za-Z:

"Mélissa Smith".match( /[\u80-\uffff]{3,30} +[\u80-\uffff]+/ ) 

равна: [ "Mélissa Smith"]

+0

Это было слишком много, но было правильным направлением, по крайней мере, для JavaScript. Закончен с использованием матча (/ [\ u80- \ uffff] +/gi – Gamak

0

Поместите регулярное выражение в режим Unicode с /umodifier и используйте подходящий Unicode character class вместо жесткого кодирования только латинскими буквами:

$pattern = '/^(\pL|-){3,30}\s+\pL+$/u'; 

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

Вы должны иметь в виду, что при этом вход (как и сам образец) должен быть закодирован в UTF-8.

Однако следует сказать, что наивно разбираться в именах, подобных этому, не даст вам очень хороших результатов. Полные имена людей слишком связаны для чего-то такого простого для работы по всем направлениям.

+0

Этот ответ приемлем для PHP, но javascript не поддерживает классы символов Юникода, а только экраны, такие как «\ uFFFF». Однако ОП не указал. – dequis

+0

@dequis: Я понятия не имею, почему вопрос помечен JS, но данный код определенно PHP. Вот почему я только обратился к этому языку. – Jon

+0

Я фактически использую JavaScript и PHP для анализа первых и последних имен в разных частях моего приложения. Если бы мне пришлось использовать только один. – Gamak

-1

Попробуйте использовать выражение POSIX [: alpha:] вместо [a-zA-Z-], чтобы поймать символы. [: alpha:] поймают эквивалентные символы, такие как акценты.

http://www.regular-expressions.info/posixbrackets.html

+1

Механизм регулярных выражений POSIX устарел в PHP с 5.3 и может быть удален в будущем. – dequis