Django RegexValidator 未按预期工作

0 投票
1 回答
3218 浏览
提问于 2025-04-18 10:41

我在使用RegexValidator类时遇到了问题。

我想在一个字符字段中允许输入一些特定的HTML标签,比如

  • 。我找到的正则表达式正好满足我的需求,但我在实现它时遇到了困难。

        <\/?(?!p|ul|li)[^/>]*>
    

    我想把它放到我的Django模型中,具体方式如下:

         description = models.CharField(max_length = 255, validators=[
                                            RegexValidator(
                                                regex =  r'<\/?(?!p|ul|li)[^/>]*>',
                                                message = 'Disallowed Tags',
                                                code = 'DISALLOWED_TAGS',
                                            ),
                                        ],
                                   )
    

    我使用的是Django 1.6。当我实现上面的代码时,似乎所有通过管理界面提交的表单都无法通过验证。

    有没有什么建议?

    谢谢!

1 个回答

1

自己写一个验证器,如果正则表达式匹配,就抛出一个错误,因为这不应该被允许。
这里有关于验证器的更多信息。

import re
from django.core.exceptions import ValidationError

def test(val):
    if re.match('<\/?(?!p|ul|li)[^/>]*>', val):
        raise ValidationError('Disallowed Tags')

class Foo(models.Model):
    name = models.CharField(max_length = 150, validators=[test]) 

撰写回答