Регулярное выражение PHP. Проверьте, содержит ли строка ТОЛЬКО буквы - PullRequest
2 голосов
/ 24 апреля 2010

Как в PHP проверить, содержит ли строка только буквы? Я хочу написать оператор if, который будет возвращать false, если есть (пробел, число, символ) или что-то еще, кроме a-z и A-Z

Моя строка должна содержать ТОЛЬКО буквы.

Я думал, что смогу сделать это таким образом, но я делаю это неправильно:

if( ereg("[a-zA-Z]+", $myString))
   return true;
else
   return false;

Как мне узнать, содержит ли myString только буквы?

Ответы [ 6 ]

10 голосов
/ 24 апреля 2010

Да, это отлично работает. Спасибо

if(myString.matches("^[a-zA-Z]+$"))
8 голосов
/ 24 апреля 2010

Никогда не слышал о ereg, но я предполагаю, что он будет совпадать с подстрокой.

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

"^[a-zA-Z]+$"

Кроме того, вы могли бы упростить вашу функцию для чтения

return ereg("^[a-zA-Z]+$", $myString);

потому что if для возврата true или false из того, что уже является логическим значением, является избыточным.


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

return !ereg("[^a-zA-Z]", $myString);

Обратите внимание на ^ в начале набора символов, который инвертирует его. Также обратите внимание, что вам больше не нужен + после него, так как один «плохой» символ приведет к совпадению.


Наконец ... этот совет для Java, потому что у вас есть Java тэг в вашем вопросе. Но $ в $myString выглядит так, как будто вы имеете дело, может быть, с Perl или PHP? Некоторое разъяснение может помочь.

4 голосов
/ 24 апреля 2010

Ваш код выглядит как PHP. Возвращается true, если в строке есть буква. Чтобы убедиться, что строка содержит только букв, вам необходимо использовать начальный и конечный якоря :

В Java вы можете использовать метод matches класса String:

boolean hasOnlyLetters(String str) {
   return str.matches("^[a-zA-Z]+$");
}

В PHP функция ereg теперь устарела . Вам нужно использовать preg_match в качестве замены. PHP Эквивалент вышеуказанной функции:

function hasOnlyLetters($str) {
   return preg_match('/^[a-z]+$/i',$str);
}
3 голосов
/ 24 апреля 2010

Я собираюсь быть другим и использовать Character.isLetter определение того, что такое буква.

if (myString.matches("\\p{javaLetter}*"))

Обратите внимание, что это больше, чем [A-Za-z]*.

Символ считается буквой, если его общий тип категории, предоставленный Character.getType(ch), является одним из следующих: UPPERCASE_LETTER, LOWERCASE_LETTER, TITLECASE_LETTER, MODIFIER_LETTER, OTHER_LETTER

Не все буквы имеют регистр. Многие символы являются буквами, но не являются ни прописными, ни строчными, ни заглавными.

Классы символов \p{javaXXX} определены в Pattern API .

0 голосов
/ 24 апреля 2010

Самый простой способ сделать «ВСЕ символы данного типа» - это проверить, НЕ ЛИ ЛИБО тип.

Так что если \ W обозначает не-символ, просто проверьте один из них.

0 голосов
/ 24 апреля 2010

Либо попробуйте проверить, содержит ли оно что-либо кроме букв: [^ A-Za-z]

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