我正在编写一个字段,该字段以字母作为参数,并从该字母生成加密安全的随机字符串。验证器还接受一个length参数。这是该模板:
from django.core.validators import RegexValidator
class AlphabetValidator(RegexValidator):
def __init__(self, alphabet, max_length):
pass
如您所见,其想法是使用RegexValidator
作为基类。问题在于赋予字母的灵活性,因为它可以包含所有内容。我仅将其用于验证字母和数字或仅用于验证十六进制表示形式,但我想同时确保将其安全用于其他用途。
还要注意,给定字母中的任何字符都应按字面值使用,包括$
,.
等。我想到的是将字母包装在一个类中:"[" + alphabet "]"
。当然,这意味着我需要转义-
和]
。我不确定[
。
我的问题是,转义这三个字符是否足够?还有其他我应该考虑的吗?还是社区是否有更好的方法来建议实现相同目标。
答案 0 :(得分:0)
正在回答自己,发现re.escape():
在模式中转义特殊字符。如果您想 匹配可能具有正则表达式的任意文字字符串 其中的元字符。
这就是我最终得到的:
self._alphabet = '^(%s){%d}$' % (re.escape(alphabet), max_length)