Нужна помощь с жестким регулярным выражением - PullRequest
2 голосов
/ 17 января 2010

Мне нужно регулярное выражение, которое проверяет, содержит ли строка только буквы (az) и что первая буква заглавная, вы не можете иметь 2 буквы в заглавном слове. действительный

вид:

The Magician Of The Elfs будет действительным, но не ThE MaGiCiAN oF ThE ELFS

if (!preg_match("??", $name)) {
   echo "Invalid name!";
}

надеюсь, вы понимаете!

Tomasz

Invalid:

MaGIciaN Of The ELFz
THomas anderson

Действительно:

Magician of the elfs
Magician Of the Elfs
Magician of The elfs
Thomas Anderson
Thomas anderson

По сути, я не хочу, чтобы в слове было возможно использовать более 1 заглавной буквы, а не предложение.

Ответы [ 5 ]

5 голосов
/ 17 января 2010
'/^[A-Z][a-z]+( [A-Z][a-z]+)*$/'

Не проверено, однако.

РЕДАКТИРОВАТЬ О, возможно, я неправильно понял ваш вопрос. Выше предполагается минимальная длина слова два. «Джон А» или «Лошадь» действительны? В этом случае: '/^[A-Z][a-z]*( [A-Z][a-z]*)*$/'.


Согласно обновленным требованиям:

'/^[A-Z][a-z]*( [A-Za-z][a-z]*)*$/'

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

3 голосов
/ 17 января 2010

Вы также можете описать символ по его свойствам символов Unicode :

/^\p{Lu}\p{Ll}*(?:\s+\p{Lu}\p{Ll}*)*$/

Редактировать Поскольку вы изменили свои требования, попробуйте следующее регулярное выражение:

/^[\p{Lu}\p{Ll}]\p{Ll}*(?:\s+[\p{Lu}\p{Ll}]\p{Ll}*)*$/

Теперь первый символ или каждое слово может быть заглавной или строчной.

1 голос
/ 17 января 2010
$str = "ThE MaGiCiAN oF ThE ELFS";
$s = explode(" ",$str);
foreach ($s as $k){
    if ( ! (preg_match("/^[A-Z][a-z]+/",$k) )){
        print "$str does not match.\n";
        break;
    }
}
0 голосов
/ 17 января 2010
if (preg_match("\w[A-Z]", $name)) {
    echo "invalid name!";
}
0 голосов
/ 17 января 2010

Ничего себе. \b, ребята.

if matches /\B[A-Z]/ then invalid

или, для понимания Unicode,

if matches /\B\p{Lu}/ then invalid

Вы можете сначала убедиться, что вся строка соответствует /^[\p{Lu}\p{Ll}\s]$/, чтобы не оставлять строки типа The (Magic) Elf действительными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...