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

问题描述:

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

我的字符串只能包含字母。

我想我能做到这样,但我做错了:

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

如何找出是否myString只包含字母?

+11

这不是Java。你可能意味着PHP。 – 2010-04-24 08:47:21

+0

为什么是正则表达式? 'ctype_alpha($ myString);' – AbraCadaver 2017-01-25 16:26:58

从来没有听说过ereg,但我猜测它会匹配子字符串。

在这种情况下,你要包括在你的正则表达式的两端锚,从而迫使整个字符串匹配:

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

此外,您可以简化您的函数读取

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

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


或者,你可以匹配这一个字母的任何字符,并返回结果的补充:在字符集,它反转的开始

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

注意^它。另外请注意,你之后不再需要+,因为单个“坏”字符会导致匹配。


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

+1

请注意'ereg'从PHP 5.3开始已被弃用。使用['preg_match'](http://php.net/manual/en/function.preg-match.php)代替 – DrColossos 2015-04-01 10:41:49

或者,尝试检查是否包含字母其他任何东西:[^ A-ZA-Z]

是啊,这工作正常。谢谢

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

您的代码看起来像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); 
} 

我会有所不同,使用的是什么信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

做一个“是给定类型的所有字符”的最简单方法是检查是否任何字符不是该类型的。

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

+0

一般来说是正确的,但是在Java中,通常会因为隐式锚定'matches()'方法。所以它的.matches(“\\ w +”)'vs'!s.matches(“。* \\ W。*”)' – 2010-04-24 12:23:38