2013-02-25 79 views
0

我的一个Django应用程序,我需要使用标志进行字符串验证。我的意思是:在 管理面板,我添加了例如:用户给出的正则表达式检查字符串

等等

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

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

  • *任何标志,一次或多次
  • ?为1米的标志。

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

+1

是'baduser @ gmailxcom'的有效地址还是只对用户名有效的标志? – eumiro 2013-02-25 11:42:05

+0

baduser*@gmail.com是由管理员提供的字符串。该表达应该阻止例如:[email protected],[email protected]等。 我必须以某种方式转义有效的电子邮件标志,如'。'。和'+'是正则表达式中的特殊字符。 – tunarob 2013-02-25 11:56:41

回答

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('[email protected]') 
<_sre.SRE_Match object at 0x107467780> 
>>> translate_pattern('baduser*@gmail.com').search('[email protected]') 

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

>>> translate_pattern('baduser*@gmail.com').search('[email protected]') 
<_sre.SRE_Match object at 0x1074677e8> 

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

+0

听起来像一个很好的解决方案:) – tunarob 2013-02-25 13:40:43