2013-04-11 137 views
8

我正在驗證用戶輸入的文本,以便它只接受字母而不接受數字。到目前爲止,當我輸入數字(例如56)時,我的代碼工作正常,它警告我,我應該只鍵入字母,當我鍵入字母時,它不會返回任何內容(就像它應該這樣做)。我的問題是,當我開始輸入字母,然後輸入數字時,它就會接受它。 (S45)。它所做的是接受第一個字母,而不是整個字符串。我需要它來接受整個字符串。在您的正則表達式+原始字符串Python-如何使用re來匹配整個字符串

def letterCheck(aString): 
    if len(aString) > 0: 
     if re.match("[a-zA-Z]", aString) != None: 
      return "" 
    return "Enter letters only" 
+0

那麼你必須空車返回,並嘗試添加'+'到你的正則表達式的結束。 – squiguy 2013-04-11 17:02:13

+0

不,返回部分很好。如果它通過了驗證測試,它的意思是什麼都不會返回。 – Thomas 2013-04-11 17:03:24

+2

爲什麼你不只是使用'aString.isalpha()'? – kindall 2013-04-11 17:04:14

回答

31

錨它開始和結束,並匹配一個或多個字符:

if re.match("^[a-zA-Z]+$", aString): 

這裏^定位到字符串的開頭,$到結尾,+確保您匹配1個或多個字符。

你會更好,只是使用str.isalpha()來代替。這裏不需要大量的正則表達式錘子:

>>> 'foobar'.isalpha() 
True 
>>> 'foobar42'.isalpha() 
False 
>>> ''.isalpha() 
False 
+3

你需要這個:'^'與re.match?這不是暗示嗎? – Medorator 2014-08-27 17:50:09

+2

@buffer:是的,這是隱含的;我更喜歡一個明確的錨點,但是你絕對需要'$',並且有太多的人在re.search()和're.match()'之間的區別。 – 2014-08-27 18:02:06

+0

@MartijnPieters:這是一個很好的建議。我無法從文檔中推斷,如果可能有任何副作用,將'^'與're.match'放在一起。 – Medorator 2014-08-28 04:38:06

4

利用邊界進行編碼正則表達式,像這樣:

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

您可能會考慮在字符串上使用isalpha()。如果字符串不包含字母字符,則返回true,否則返回false。

if aString.isalpha(): 
    do something 
else: 
    handle input error 
+0

這個應用程序'isalpha()'的一個不錯的屬性是它爲空字符串返回False,所以不再需要單獨的測試。 – kindall 2013-04-11 17:24:52

+0

謝謝大家的快速回答,他們都幫助我解決了這個問題。 – Thomas 2013-04-11 17:38:49

0

如果你看漂亮的Python的著作,去因而isalpha和isdecimal:

str = u"23443434"; 
print str.isdecimal(); 
相關問題