用户给定的正则表达式检查字符串

时间:2013-02-25 11:39:00

标签: python regex django

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

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

等...

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

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

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

任何想法我怎么能做到?

1 个答案:

答案 0 :(得分: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>

因为.-中的gmail-com匹配。