首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >否则,我如何在那里编写django自定义验证,而不是尝试和除

否则,我如何在那里编写django自定义验证,而不是尝试和除
EN

Stack Overflow用户
提问于 2022-02-01 04:15:36
回答 1查看 92关注 0票数 0

否则,我如何设置这个django自定义验证函数来验证美国电话号码,而不是“尝试”和“除阻塞”

代码语言:javascript
复制
def validate(value):
        if re.match(r"[+]?[1\s-]*[\(-]?[0-9]{3}[-\)]?[\s-]?[0-9]{3}[\s-]?[0-9]{4}",value):
            return True
        else:
            return False
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-01 04:37:32

为了将函数用作Django字段的验证器,如果给定无效值,则需要引发ValueError

下面是validators.py中验证器的一个示例,它适合于遵循这一约定,并使用re.compile()来加快正则表达式匹配:

代码语言:javascript
复制
# validators.py
import re

# Create a compiled regular expression to speed things up.
# You can also break your string into two strings, one per
# line, to improve readability:
PHONE_REGEX = re.compile(r"[+]?[1\s-]*[\(-]?[0-9]{3}[-\)]?[\s-]?"
                         r"[0-9]{3}[\s-]?[0-9]{4}")

def validate_phone_number(value):
    """Validates that a phone number matches the format
    123 456 7890, with optional dashes between digit groups
    and parentheses around the area code.
    """
    if not PHONE_REGEX.match(value):
        raise ValueError(f'{value} must be in the format 123 456 7890')

您可以在models.py中使用此验证器,如下所示:

代码语言:javascript
复制
# models.py
from django.db import models
from .validators import validate_phone_number

class YourModel(models.Model):
    phone_number = models.CharField(max_length=30, validators=[validate_phone_number])

还有几个注意事项:

  • 查看这个StackOverflow问题,为您的电话号码获得更好的正则表达式。
  • 请注意,并非所有的电话号码都有十位数。如果你的网站是为一个国际观众,你将不得不接受他们的电话号码。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70935504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档