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

tun*_*rob 0 python regex django

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

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

等等...

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

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

  • * 作为任何标志,一次或多次
  • ? 作为1号.

任何想法我怎么能这样做?

Mar*_*ers 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))
Run Code Online (Sandbox Code Playgroud)

该函数返回预编译的正则表达式:

>>> translate_pattern('baduser*@gmail.com').search('baduser12345@gmail.com')
<_sre.SRE_Match object at 0x107467780>
>>> translate_pattern('baduser*@gmail.com').search('gooduser@gmail.com')
Run Code Online (Sandbox Code Playgroud)

请注意,由于您匹配.任何字符,下面的比赛太:

>>> translate_pattern('baduser*@gmail.com').search('baduser12345@gmail-com')
<_sre.SRE_Match object at 0x1074677e8>
Run Code Online (Sandbox Code Playgroud)

因为.比赛-gmail-com.