0

我是我的 Django 应用程序之一,我需要使用标志进行字符串验证。我的意思是:在管理面板中,我添加了例如:

  • baduser*@gmail.com
  • spambot-?@gmail.com

ETC...

不会有严格的 pythonic 正则表达式,而是 '*' 或 '?' 由普通管理员提供

当有人注册时,我必须通过 Python 正则表达式检查所有凭据。我需要检查:

  • *作为任何标志,一次或多次
  • ?作为 1 个标志。

任何想法我怎么能做到这一点?

4

1 回答 1

5

您可以将其转换为正则表达式,然后使用它来匹配电子邮件地址。

这并不难做到:

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

于 2013-02-25T11:43:46.823 回答