【问题标题】:How can I make a Django form field contain only alphanumeric characters如何使 Django 表单字段仅包含字母数字字符
【发布时间】:2013-06-18 09:22:25
【问题描述】:

我有这个模型

name = models.CharField(max_length=50, blank=True, null=True)
email = models.EmailField(max_length=50, unique=True)

我希望用户不能在两个字段中使用除字母数字以外的任何其他字符。

有什么办法吗?

【问题讨论】:

    标签: python django


    【解决方案1】:

    您可以使用validator 来限制该字段接受的内容。 RegexValidator 可以在这里解决问题:

    from django.core.validators import RegexValidator
    
    alphanumeric = RegexValidator(r'^[0-9a-zA-Z]*$', 'Only alphanumeric characters are allowed.')
    
    name = models.CharField(max_length=50, blank=True, null=True, validators=[alphanumeric])
    email = models.EmailField(max_length=50, unique=True, validators=[alphanumeric])
    

    请注意,已经有一个validate_email validator 可以为您验证电子邮件地址;上面的 alphanumeric 验证器不允许使用有效的电子邮件地址。

    【讨论】:

    • 用户可能难以使用alphanumeric 验证器添加有效的电子邮件地址;)
    • @Alasdair 。我只是想了解一下。我将使用这个[A-Za-z0-9@#$%^&+=]{6,}。可以吗
    • 我试过了,它说名称字母数字未定义。我已经在模型外部声明了
    • @user1958218:有一个专用的电子邮件验证器。抱歉,我的名字打错了,请重新复制粘贴。
    • 是否有某种方法可以直接响应用户提交的密钥?而不是等待表单提交后?
    【解决方案2】:

    而不是 RegexValidator,只在表单属性中进行验证,例如...

            class StaffDetailsForm(forms.ModelForm):
                 first_name = forms.CharField(required=True,widget=forms.TextInput(attrs={'class':'form-control' , 'autocomplete': 'off','pattern':'[A-Za-z ]+', 'title':'Enter Characters Only '}))
    

    等等……

    否则,您将不得不处理视图中的错误。 它对我有用,试试这个简单的方法...... 这将允许用户仅输入字母和空格

    【讨论】:

    • 记住这只是前端验证!您还应该添加 RegexValidator 验证以在后端验证该字段的值!
    【解决方案3】:

    这比你想要的要宽一点,但你也可以使用SlugField

    Slug 基本上是某事物的短标签,仅包含 字母、数字、下划线或连字符。它们通常用于 网址。例如,在典型的博客条目 URL 中: https://www.geeksforgeeks.org/add-the-slug-field-inside-django-model/

    field_name = models.SlugField(max_length=200, **options)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      • 2019-03-09
      • 2012-09-07
      • 2014-10-01
      • 2016-10-29
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多