คุณอาจดูรูปแบบE.164 ที่เป็นมาตรฐานสากลซึ่งTwilio แนะนำ (ผู้ที่มีบริการและ API สำหรับส่ง SMS หรือโทรศัพท์ผ่านคำขอ REST)
นี่เป็นวิธีที่เป็นสากลที่สุดในการจัดเก็บหมายเลขโทรศัพท์โดยเฉพาะอย่างยิ่งหากคุณมีหมายเลขระหว่างประเทศที่ใช้งานได้
1. โทรศัพท์โดย PhoneNumberField
คุณสามารถใช้phonenumber_field
ไลบรารี เป็นพอร์ตของไลบรารี libphonenumber ของ Google ซึ่งช่วยในการจัดการหมายเลขโทรศัพท์ของ Android
https://github.com/stefanfoulis/django-phonenumber-field
ในรุ่น:
from phonenumber_field.modelfields import PhoneNumberField
class Client(models.Model, Importable):
phone = PhoneNumberField(null=False, blank=False, unique=True)
ในรูปแบบ:
from phonenumber_field.formfields import PhoneNumberField
class ClientForm(forms.Form):
phone = PhoneNumberField()
รับโทรศัพท์เป็นสตริงจากช่องวัตถุ:
client.phone.as_e164
Normolize สายโทรศัพท์ (สำหรับการทดสอบและเจ้าหน้าที่อื่น ๆ ):
from phonenumber_field.phonenumber import PhoneNumber
phone = PhoneNumber.from_string(phone_number=raw_phone, region='RU').as_e164
2. โทรศัพท์โดย regexp
หมายเหตุสำหรับรุ่นของคุณ: หมายเลข E.164 มีความยาวอักขระสูงสุด 15 ตัว
ในการตรวจสอบความถูกต้องคุณสามารถใช้การจัดรูปแบบผสมบางอย่างจากนั้นพยายามติดต่อหมายเลขทันทีเพื่อยืนยัน
ฉันเชื่อว่าฉันใช้สิ่งต่อไปนี้ในโครงการ django ของฉัน:
class ReceiverForm(forms.ModelForm):
phone_number = forms.RegexField(regex=r'^\+?1?\d{9,15}$',
error_message = ("Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed."))
แก้ไข
ดูเหมือนว่าโพสต์นี้จะมีประโยชน์กับบางคนและดูเหมือนว่ามันจะคุ้มค่าที่จะรวมความคิดเห็นด้านล่างให้เป็นคำตอบที่ครบถ้วนสมบูรณ์ยิ่งขึ้น ตามjpotter6คุณสามารถทำสิ่งต่อไปนี้กับโมเดลของคุณได้เช่นกัน:
models.py:
from django.core.validators import RegexValidator
class PhoneModel(models.Model):
...
phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
phone_number = models.CharField(validators=[phone_regex], max_length=17, blank=True) # validators should be a list