簡體   English   中英

通過用戶給定的正則表達式檢查字符串

[英]Check string by user-given regex

我是我的Django應用程序之一,我需要使用標志進行字符串驗證。 我的意思是:在管理面板中,例如添加:

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

等等...

不會有嚴格的pythonic正則表達式,但是'*'或'?' 由普通管理員提供

有人注冊時,我必須通過Python regex檢查所有這些憑據。 我需要檢查:

  • *作為任何符號,一次或多次
  • ? 作為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>

因為. 匹配gmail-com中的-

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM