2013-04-11 34 views
8

Tôi đang xác thực nhập văn bản của người dùng để nó chỉ chấp nhận chữ cái chứ không chấp nhận chữ số. cho đến nay mã của tôi hoạt động tốt khi tôi nhập vào một số (ví dụ: 56), nó cảnh báo tôi rằng tôi chỉ nên nhập các chữ cái và khi tôi nhập các chữ cái, nó không trả lại bất kỳ thứ gì (giống như nó nên làm). Vấn đề của tôi là nó chấp nhận nó khi tôi bắt đầu bằng cách gõ các chữ cái theo sau là các con số, ví dụ: (s45). những gì nó làm là chấp nhận chữ cái đầu tiên nhưng không chấp nhận toàn bộ chuỗi ký tự. Tôi cần nó để chấp nhận toàn bộ chuỗi.Python- làm cách nào để sử dụng lại để đối sánh với toàn bộ chuỗi

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

Vâng, bạn có trở lại trống rỗng, và thử thêm '+' để kết thúc biểu hiện thường xuyên của bạn. – squiguy

+0

không, phần trả lại là tốt. nó có nghĩa là không trả lại gì nếu nó vượt qua bài kiểm tra xác thực. – Thomas

+2

Tại sao bạn không chỉ sử dụng 'aString.isalpha()'? – kindall

Trả lời

31

Neo nó để bắt đầu và kết thúc, và trận đấu một hoặc nhiều ký tự:

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

Ở đây ^ neo vào đầu chuỗi, $ đến cuối và + đảm bảo bạn khớp 1 hoặc nhiều ký tự.

Thay vào đó, bạn nên sử dụng str.isalpha(). Không cần phải tiếp cận búa biểu hiện chính quy khổng lồ ở đây:

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

Bạn có cần điều này: '^' với re.match? Không phải là nó ngụ ý? – Medorator

+2

@buffer: có, nó được ngụ ý; Tôi thích một neo rõ ràng tuy nhiên như bạn hoàn toàn cần các '$', và quá nhiều người đi qua sự khác biệt giữa 're.search()' và 're.match()'. –

+0

@MartijnPieters: Đó là một gợi ý hay. Tôi không thể suy ra từ tài liệu nếu có thể có bất kỳ tác dụng phụ nào khi đặt '^' với 're.match' – Medorator

4

ranh giới sử dụng trong regex của bạn + chuỗi nguyên để mã hóa các regex, như thế này:

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

Bạn có thể xem xét sử dụng isalpha() trên chuỗi. Nó trả về true nếu chuỗi không chứa gì ngoài các ký tự chữ cái, nếu không thì ngược lại.

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

Một thuộc tính tốt đẹp của 'isalpha()' cho ứng dụng này là nó trả về 'False' cho các chuỗi rỗng, vì vậy kiểm tra riêng biệt cho điều đó không còn cần thiết nữa. – kindall

+0

cảm ơn tất cả các bạn đã trả lời nhanh chóng, tất cả đều giúp tôi giải quyết vấn đề này. – Thomas

0

nếu bạn tìm kiếm các tác phẩm khá pythonic, đi cho isalpha và isdecimal:

str = u"23443434"; 
print str.isdecimal(); 
Các vấn đề liên quan