Django Form验证阿拉伯语CharField

时间:2016-04-01 00:02:08

标签: python regex django django-forms

基于此答案:Using range in regex for Arabic letters

我想验证表单字段以仅允许阿拉伯字符。我的表格是:

fullname_arabic = forms.CharField(
    label=_('Arabic Full Name'),
    widget=widgets.TextInput(),
    help_text=_('Please enter your arabic name'),
)

表单有一个clean方法,它让我有问题使它工作。实际上它允许任何角色:

def clean_fullname_arabic(self):
    fullname_arabic = self.cleaned_data['fullname_arabic']
    if not re.match(r'[\u0627-\u064a]+$', fullname_arabic):
        raise forms.ValidationError("Only Arabic chars")

我知道问题必须在我的正则表达式中,但我在这里混淆概念并且无法使其发挥作用。

1 个答案:

答案 0 :(得分:1)

该检查行存在一些问题,首先应该颠倒正则表达式(您可能想要添加_-):

if re.findall(u'[^\u0627-\u064a\W]', fullname_arabic, flags=re.UNICODE)

另请注意r'已替换为u',因为\u0628不会被解释为r'

编辑:从我之前的项目中,阿拉伯语范围应更改为\u0621-\u06ED