2014-09-30 345 views
3

我想檢查密碼是否包含特殊字符。我搜索了幾個例子,但無法找到解決我的問題。我該怎麼做?這是我迄今爲止的嘗試方式;檢查字符串是否包含python中的特殊字符

elif not re.match("^[[email protected]#$%^&*()_+{}":;']+$",password) 
     print "Invalid entry." 
     continue 

我的字符串是密碼。

+3

而你沒有得到一個語法錯誤? – MattDMo 2014-09-30 21:45:19

+0

我得到一個 – 2014-09-30 21:45:36

回答

6

你不需要這個正則表達式。請嘗試:

elif set('[[email protected]#$%^&*()_+{}":;\']+$').intersection(password): 
    print "Invalid entry." 

引號已在字符串中轉義。它的作用是創建一個包含所有無效字符的集合,然後將其與password(換句話說,包含集合和密碼字符串中存在的所有唯一字符的集合)相交。如果沒有匹配,則結果集將爲空,因此評估爲False,否則將評估爲True並打印該消息。

0

特殊字符字符串中的幾個符號在正則表達式中有特殊含義,必須轉義。你會得到語法錯誤,因爲你在包含"的字符串的中間用雙引號描述,所以Python完成處理字符串,然後扼殺它後來看到的垃圾。試試這個:

elif not re.match(r"[~\[email protected]#\$%\^&\*\(\)_\+{}\":;'\[\]]", password): 
    print "Invalid entry" 
    continue 

我用了一個原始字符串,你應該總是在正則表達式中使用。我逃過了需要轉義的字符,並且簡化了一下表達式,因爲字符串標記的起始^和結尾$不是必需的 - 只要匹配成功,它就會返回True,並且會跳過以下內容碼。

當有疑問時,逃生:)

+0

你不想'elif'而不是'elif not'嗎?似乎你打印的「無效的條目」,如果密碼不符合正則表達式。 – celeritas 2014-09-30 21:55:44

+0

@celeritas是的,這就是你想要發生的事情。如果匹配成功,密碼至少包含一個特殊字符,因此它是「好」的。如果正則表達式匹配'password',則其值爲'True'。您需要否定該運行縮進的代碼。想想看... – MattDMo 2014-09-30 22:03:47

+0

是的,我在想OP是想確保密碼不包含特殊字符。 – celeritas 2014-09-30 22:06:58

相關問題