PHP正则表达式。检查String是否仅包含字母

时间:2010-04-24 08:40:51

标签: php regex string

在PHP中,如何检查字符串是否只包含字母?我想写一个if语句,如果有(空格,数字,符号)或除a-zA-Z以外的任何其他内容,将返回false。

我的字符串必须只包含字母。

我以为我可以这样做,但我做错了:

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

如何确定myString是否仅包含字母?

6 个答案:

答案 0 :(得分:10)

是的,这很好用。感谢

if(myString.matches("^[a-zA-Z]+$"))

答案 1 :(得分:8)

从未听说过ereg,但我猜它会在子串上匹配。

在这种情况下,您希望在正则表达式的任一端包含锚点,以便强制匹配整个字符串:

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

此外,您可以简化您的阅读功能

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

因为if从已经是布尔值返回truefalse是多余的。


或者,您可以匹配任何字母的字符,并返回结果的补码:

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

请注意字符集开头的^,它将其反转。另请注意,您之后不再需要+,因为单个“坏”字符会导致匹配。


最后......这个建议是针对Java的,因为你的问题上有一个 Java 标签。但$中的$myString使它看起来像你正在处理,可能是Perl或PHP?一些澄清可能有所帮助。

答案 2 :(得分:4)

您的代码看起来像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 :(得分:3)

我会变得与众不同,并使用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中定义。

答案 4 :(得分:0)

或者,尝试检查它是否包含字母以外的任何内容:[^ A-Za-z]

答案 5 :(得分:0)

执行“是给定类型的所有字符”的最简单方法是检查任何字符是否属于该类型。

因此,如果\ W表示非字符,那么只需检查其中一个。