验证wtfforms中的美国电话号码

use*_*629 -1 python flask wtforms

我正在使用烧瓶应用程序并使用wtforms:

class RegisterForm(Form):
    username = StringField('Username', validators=[DataRequired(), Length(min=3, max=25)])
    email = StringField('Email', validators=[DataRequired(), Email(), Length(min=6, max=40)])
    phone = StringField('Phone', validators=[DataRequired(), Length(10)])
Run Code Online (Sandbox Code Playgroud)

我刚刚添加了手机,正在寻找验证美国号码的方法.我遇到了http://wtforms-components.readthedocs.org/en/stable/#phonenumberfield,但这似乎不再有phonenumberfield了.什么是使用wtfforms处理此问题的最佳方法?

编辑课程:

class RegisterForm(Form):
    username = StringField('Username', validators=[DataRequired(), Length(min=3, max=25)])
    email = StringField('Email', validators=[DataRequired(), Email(), Length(min=6, max=40)])
    phone = StringField('Phone', validators=[DataRequired(),validate_phone('RegisterForm','phone'), Length(min=6, max=40)])

    def validate_phone(form, field):
        if len(field.data) > 16:
            raise ValidationError('Invalid phone number.')
        try:
            input_number = phonenumbers.parse(field.data)
            if not (phonenumbers.is_valid_number(input_number)):
                raise ValidationError('Invalid phone number.')
        except:
            input_number = phonenumbers.parse("+1"+field.data)
            if not (phonenumbers.is_valid_number(input_number)):
                raise ValidationError('Invalid phone number.')
Run Code Online (Sandbox Code Playgroud)

wgw*_*gwz 8

我在最近的一个应用程序中使用了python-phonenumbers.它使用谷歌电话号码解析的东西.这是我如何使用它:

from wtforms import ValidationError
import phonenumbers

class RegisterForm(Form):
    username = StringField('Username', validators=[DataRequired(), Length(min=3, max=25)])
    email = StringField('Email', validators=[DataRequired(), Email(), Length(min=6, max=40)])
    phone = StringField('Phone', validators=[DataRequired()])

    def validate_phone(form, field):
        if len(field.data) > 16:
            raise ValidationError('Invalid phone number.')
        try:
            input_number = phonenumbers.parse(field.data)
            if not (phonenumbers.is_valid_number(input_number)):
                raise ValidationError('Invalid phone number.')
        except:
            input_number = phonenumbers.parse("+1"+field.data)
            if not (phonenumbers.is_valid_number(input_number)):
                raise ValidationError('Invalid phone number.')
Run Code Online (Sandbox Code Playgroud)