2015-01-09 3 views
0

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

Один я использую в настоящее время выглядит следующим образом:

/^[A-Za-zåäöÅÄÖ\s\-\ ]*$/ 

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

Мне нужно изменить это, чтобы позволить:

  • Специальных букв, таким как éýÿüåäö и т.д. (желательно, не имея писать их все вручную)
  • заглавной буквы в начале каждого нового слова
  • Пробелы между словами
  • - дефисы между словами, но не до или после полной строки
  • Он не должен допускать п которые он еще не сделал. Поскольку я не работал много с конструкцией регулярных выражений, я в темноте о том, как этого достичь, я нашел много решений, которые покрывают тот или иной сценарий, но не все из тех, которые мне нужны , Я был бы признателен за помощь. Регулярное выражение должно работать для проверки PHP.

    EDIT:

    $fname = 'Scrooge Mc-Duck'; //Only example string 
    $fname = trim($fname); 
    
    if (!preg_match('/^\p{Lu}\p{Ll}+([ -]+\p{Lu}\p{Ll}+)*$/', $fname)) { 
        $fnameErr = 'Invalid first name'; 
    } 
    

    Это выводит сообщение об ошибке при использовании раствора @ npinti в.

    +0

    Какой двигатель/платформа для регулярных выражений? –

    +0

    @AlexK. Я использую PHP для проверки того, что вы имеете в виду. – Chrillewoodz

    +0

    См. '\ P {L}' @ http://php.net/manual/en/regexp.reference.unicode.php & http://www.regular-expressions.info/unicode.html –

    ответ

    0

    Предполагая, что ваш механизм регулярного выражения может выставить character classes. Вы можете использовать \p{L} для соответствия любым письмом. Итак, чтобы соответствовать названию, вы можете использовать ^\p{Lu}\p{Ll}+([ -]+\p{Lu}\p{Ll}+)*$.

    Это позволит вам сопоставить букву с верхним регистром, за которой следует одна или несколько строчных букв. В свою очередь, за этим может следовать комбинация из 0 или более белых пробелов и тире, а затем следует буква верхнего регистра и одна или несколько строчных букв. ^ и $ в начале и в конце убедитесь, что регулярное выражение соответствует всей строке.

    Демонстрация регулярного выражения может быть просмотрена here.

    +0

    Он, похоже, не поддерживает его, к сожалению, есть ли альтернатива? – Chrillewoodz

    +0

    @Chrillewoodz: Какую версию PHP вы используете? – npinti

    +0

    @PaulCrovella: Я попытался использовать подход, который вы упомянули, но по какой-то причине я не мог заставить его работать. Если вы можете привести пример, это было бы полезно :). – npinti

    Смежные вопросы