我是我的 Django 应用程序之一,我需要使用标志进行字符串验证。我的意思是:在管理面板中,我添加了例如:
baduser*@gmail.com
spambot-?@gmail.com
ETC...
不会有严格的 pythonic 正则表达式,而是 '*' 或 '?' 由普通管理员提供
当有人注册时,我必须通过 Python 正则表达式检查所有凭据。我需要检查:
*
作为任何标志,一次或多次?
作为 1 个标志。
任何想法我怎么能做到这一点?
您可以将其转换为正则表达式,然后使用它来匹配电子邮件地址。
这并不难做到:
import re
def translate_pattern(pattern):
res = []
for c in pattern:
if c == '*':
res.append('.+') # 1 or more
elif c == '.':
res.append('.') # exactly 1
else:
res.append(re.escape(c)) # anything else is a literal character
return re.compile(''.join(res))
该函数返回已编译好的正则表达式:
>>> translate_pattern('baduser*@gmail.com').search('baduser12345@gmail.com')
<_sre.SRE_Match object at 0x107467780>
>>> translate_pattern('baduser*@gmail.com').search('gooduser@gmail.com')
请注意,因为您匹配.
任何字符,所以以下也匹配:
>>> translate_pattern('baduser*@gmail.com').search('baduser12345@gmail-com')
<_sre.SRE_Match object at 0x1074677e8>
因为.
匹配-
in gmail-com
。