#用python来制作一个过滤器可以很简单。 #例如实现一个对函数的所有参数进行过滤的过滤器,在过滤器中过滤时也可以进行异常处理。
#字符串过滤器 #对字符串保留属于特定字符集合的字符。
#简单实现: a = 'abcde' print a.replace('a','').replace('e','')
#best: import string #建立一个字符表,用来产生补集。字符表为256个字符的字符串集合。 #maketrans{dy}个参数是需要替换的字符集合,第二个参数是替换目标集合 #maketrans('a','~')得到的字符表中的a会被替换为~ #参数为空是不替换字符 allchars = string.maketrans('','') keep_char = 'aeiou' #建立补集 #translate{dy}个参数是个字符表,必须是256个字符。第二个参数是待删除的字符。 #将allchars中keep_char相同的字符删除,然后按照{dy}个参数指定的字符表翻译 del_char = allchars.translate(allchars,keep_char) #把a中包含非保留字符的字符删除 print a.translate(allchars,del_char) #封装一下,就是个简单的过滤器了:) def makefilter(keep_char): '''保留特定字符集合''' import string allchars = string.maketrans('','') del_char = allchars.translate(allchars,keep_char) def do_filter(s): return s.translate(allchars,del_char) return do_filter s = 'abcdefg' aeiou_filter = makefilter('aeiou') print aeiou_filter(s) #print : ae
用修饰器来实现一个对输入进行安全过滤的机制:
def makefilter(keep_char): '''保留特定字符集合''' import string allchars = string.maketrans('','') del_char = allchars.translate(allchars,keep_char) def do_filter(s): return s.translate(allchars,del_char) return do_filter
def alpha_filter(func): '''只保留字符''' import string def run(*argv): if len(argv) > 0: filter = makefilter(string.ascii_letters) handle_argv = [filter(i) for i in argv ] func(*handle_argv) else: func() return run
@alpha_filter def no_safe(arvg1,arvg2): print 'arvg1:',arvg1 print 'arvg2:',arvg2
no_safe('<script>','<iframe>')
#结果: arvg1: script arvg2: iframe |