簡體   English   中英

如果拆分列表中的值為空,則返回False

[英]If Value in Split List is Empty Return False

我正在編寫一個允許用戶輸入電子郵件的腳本。 如果電子郵件具有“用戶名”和“域名”,例如username@domain.com,則程序應輸出該電子郵件是電子郵件。 如果用戶輸入諸如username @之類的內容,則程序應輸出輸入不是有效的電子郵件地址。

當文本是電子郵件時,該函數應返回True,否則返回False。

輸入“username @”或“@ gmail.com”這樣的地址時,我遇到了讓程序返回False的問題。

我目前有以下代碼:

text = ''
tokens = 0
split_counter = 0

def isEmail(text):
    tokens = text.split('@')
    split_counter = len(tokens)
    if split_counter == 2:
        print(text, '==> EMAIL')
    else:
        print(text, '==> NOT EMAIL')
    return

while True:
    text = input("Email: ")    
    if text == 'quit':
        print('Later!')
        break
    else:
        isEmail(text)

謝謝。

我建議使用正則表達式並查看StackOverflow上的其他答案以檢查有效的電子郵件。 但是在回答你的問題時,根據你上面的評論,當你嘗試“@ gmail.com”時,它不會返回false。 這是因為當你用“@”分割字符串時,它會返回

string = "@gmail.com"
string.split("@")
>>> ['', 'gmail.com']

因此,返回列表的長度為2.您可以在split_counter列表中進行另一次檢查:

if split_counter == 2 and tokens[0] != '':
    print(text, '==> EMAIL')

作為一種調試代碼的方法,我建議您一路打印所有內容。 它將幫助您避免將來出現這樣的錯誤。 你知道條件必須是錯誤的,條件只依賴於split_counter,所以你可以打印split_counter來查看出錯的地方。

如果只有一個@split方法總是返回兩個字符串。 例如:

>>> text="foo@"
>>> text.split('@')
['foo', '']

所以你應該檢查兩個返回的字符串的長度是否大於零。

你可以看到問題是split()函數:

>>> text = "@gmail.com"
>>> tokens = text.split("@")
>>> tokens
['', 'gmail.com']

最佳做法是使用regex來檢查有效的電子郵件,而不是編寫硬代碼:

def isEmail(text):
    if len(text) > 6:
        if re.match(r'\b[\w.-]+@[\w.-]+.\w{2,4}\b', text) != None:
            # do something
    else:
        # do something

如果你不知道什么是regex ,那么這可能是學習它的最佳時機。

一個簡單的解決方案可能是利用all()和事實, bool("")False

>>> email = "@gmail.com"
>>> s = email.split("@")
>>> all(s)
>>> False

>>> email = "a@"
>>> s = email.split("@")
>>> all(s)
>>> False

>>> email = "a@gmail.com"
>>> s = email.split("@")
>>> all(s)
>>> True

但請注意,此代碼並未說明電子郵件地址的“正確性”。 它只說明一個字符串是否可以被@拆分而且沒有一個部分是空的。

為此,我將依賴於Django等框架或類似WTForms之類的框架提供的驗證器。

所有你遺失的是第11行的另一張檢查:

if split_counter == 2 and len(tokens[0]) > 0 and len(tokens[1]) > 0:
    print(text, '==> EMAIL')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM