2014-09-30 288 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

相关问题