2010-04-24 156 views
2

在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

回答

8

從來沒有聽說過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

0

或者,嘗試檢查是否包含字母其他任何東西:[^ A-ZA-Z]

10

是啊,這工作正常。謝謝

if(myString.matches("^[a-zA-Z]+$")) 
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

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

做一個「是給定類型的所有字符」的最簡單方法是檢查是否任何字符不是該類型的。

所以如果\ W表示一個非字符,那麼只需檢查其中的一個。

+0

一般來說是正確的,但是在Java中,通常會因爲隱式錨定'matches()'方法。所以它的.matches(「\\ w +」)'vs'!s.matches(「。* \\ W。*」)' – 2010-04-24 12:23:38

相關問題