输入 Django 电话号码时,如何允许用户“马虎”?

Posted

技术标签:

【中文标题】输入 Django 电话号码时,如何允许用户“马虎”?【英文标题】:How can I allow user to be "sloppy" when entering a Django phone number? 【发布时间】:2018-03-12 10:17:48 【问题描述】:

我正在制作一个 Django 表单来更新用户对网站的成员资格。我希望能够存储电话号码。我找到了django-phonenumber-field,这很棒。唯一的问题是我为用户创建的用于输入电话号码的表单过于具体。如果用户没有将他们的号码输入为“+99999999”,那么他们会收到输入错误。我希望用户能够以多种方式输入他们的号码:999-999-9999、9-999-9999、(999)999-9999 等。实现此目的的最佳方式是什么?

我的代码:

models.py

from django.db import models
from phonenumber_field.modelfields import PhoneNumberField


class Member(models.Model):
    """defines a member for annual registration"""
    name = models.CharField(max_length=255)
    mailing_address = models.CharField(max_length=255)
    home_phone = PhoneNumberField()
    other_phone = PhoneNumberField(blank=True)
    email = models.EmailField()

forms.py

from django import forms

from .models import Member


class MembershipForm(forms.ModelForm):
    """form for renewing membership"""

    class Meta:
        model = Member
        fields = ('name',
                  'mailing_address',
                  'home_phone',
                  'other_phone',
                  'email',
                 )

感谢您的帮助!

【问题讨论】:

您可以使用简单的字符串操作函数将字符串中所有不是数字的字符添加到前面。 pypi.python.org/pypi/django-phonenumber-field/1.1.0 ***.com/questions/19130942/… 我建议使用正则表达式来查找输入字符串中的所有数字(或取出所有非数字),然后将其提供给 django。世界各地都有大量的电话号码正则表达式。进行某种服务器端用户输入验证总是是一种好习惯,即使它有点乏味。 【参考方案1】:

该字段定义是 Django 中的自定义字段。您可以创建自己的自定义字段。我建议获取 PhoneNumberField 的代码,它是开源的,并将其子类化到您自己的字段 MyPhoneNumberField。根据需要覆盖验证逻辑。查看这些东西如何工作的详细信息 https://docs.djangoproject.com/en/1.11/ref/forms/validation/

【讨论】:

以上是关于输入 Django 电话号码时,如何允许用户“马虎”?的主要内容,如果未能解决你的问题,请参考以下文章

如何将电话号码字段添加到 django UserCreationForm?

当用户点击第 11 个号码时,如何验证输入文本(在 html 中)是不是是有效的电话号码?

如何在单个请求中使用 django 信号将数据保存在(用户和配置文件)表中?

如何允许其他人连接到我的 Django 网站?

Django 允许用户在电子邮件中插入动态内容

EditText中输入信息的限制的方法