首页 > 解决方案 > Django 抽象字母验证器

问题描述

我正在编写一个将字母表作为参数并从该字母表生成加密安全随机字符串的字段。验证器还接受一个长度参数。这是模板:

from django.core.validators import RegexValidator

class AlphabetValidator(RegexValidator):

    def __init__(self, alphabet, max_length):
        pass

如您所见,这个想法是RegexValidator用作基类。问题在于赋予字母表的灵活性,因为它可以包含所有内容。我只使用它来验证字母和数字或仅十六进制表示,但我想提前确保它对其他用途的安全。

另请注意,给定字母表中的任何字符都应按字面意思理解,包括$.等。我的想法是将字母表包装在一个类中:"[" + alphabet "]". 当然,这意味着我需要逃跑-并且]. 我不确定[

我的问题是转义这三个字符是否足够?还有其他我应该考虑的吗?或者社区是否有更好的方法来建议完成同样的事情。

标签: djangodjango-validation

解决方案


回答自己,发现re.escape()

转义模式中的特殊字符。如果您想匹配其中可能包含正则表达式元字符的任意文字字符串,这很有用。

这就是我最终得到的结果:

self._alphabet = '^(%s){%d}$' % (re.escape(alphabet), max_length)

推荐阅读