繁体   English   中英

是否有用于电话号码验证的正则表达式?

[英]Is there a Regex expression for phone number validation?

我正在建立一个新网站,并希望验证用户输入的电话号码。 我需要使用什么正则表达式来获取 04xx xxx xxx 格式? 第五个和第九个字符之间需要有一个空格。

我试过使用这个表达式: ^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\\s\\./0-9]*$

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using System.ComponentModel.DataAnnotations;

    namespace InspiringMagazines.Models
    {
        public class Customer
        {
                public int customerID { get; set; }
                [Display(Name = "GivenName")]
                [MinLength(2), StringLength(20), Required(ErrorMessage =                                                         
    @"The Given Name is required.")]
                [RegularExpression(@"[0-9][a-z'-]{3,20}")]
                public string firstName { get; set; }
                [Display(Name = "FamilyName")]
                [MinLength(2), StringLength(20), Required(ErrorMessage =         
    @"The Family Name is required.")]
                [RegularExpression(@"[0-9][a-z'-]{3,20}")]
                public string lastName { get; set; }
                [Display(Name = "Date of Birth")]
                public string dateOfBirth { get; set; }
                public string emailAddress { get; set; }
                [MinLength(12), StringLength(12), Required(ErrorMessage =         
    @"The Phone Number is required.")]

                public string mobileNumber { get; set; }
                public string postalCode { get; set; }
        }
    }

预期结果是电话号码不是 04xx xxx xxx 格式以显示错误消息。 现在的实际结果是所有数字都被接受了。

就理解而言,最简单的正则表达式是:

^04\d\d \d\d\d \d\d\d$

但请注意,这可能会让他们也输入 ascii 范围之外的 Unicode 数字

老实说,过度验证对用户的刺激性大于对您的帮助,尤其是当您的错误消息如此糟糕时。 对输入有一些复杂的要求,然后只告诉他们“需要给定的名称”是不好的。 如果他们的名字真的是“Q”呢? 您不会说“给定的名称必须至少为两个字符”(更好的错误消息),但是我的问题是“为什么名称必须至少为两个字符?” 如果一个人把一个字符作为他们的名字,你在乎什么?

同样对于电话号码,让他们输入他们喜欢的任何内容,任何旧的方式。 当您验证并检查他们输入了以 04 开头的 10 位数字时,去掉他们输入的所有废话。错误消息应该说“电话号码应该以 04 开头,总共有 10 位数字”。 用 04 预先填充框以帮助他们,并在他们给你的东西上运行它:

Regex.Replace(theirInput, "[^0-9]", "");

它去掉所有的连字符、括号、空格等。检查结果的长度。 这里的信息是:“不要要求你的用户输入空格,因为空格真的无关紧要。你可以把它们放在自己的代码中,在你把(0400) 223-456的用户输入(0400) 223-456到只是数字0400223456 ,只需使用字符串子字符串

“容忍你接受的东西,严格你发送的东西”是编写使用 HTTP 的服务器的口头禅,但适用于任何用户输入是一件好事; 始终旨在消除用户的各种垃圾输入并对其进行清理以满足您的标准,而不是强迫用户满足它,如果您强迫用户,一定要准确地告诉他们他们哪里出错了。 旨在进行立即反馈的验证 - 不要让他们提交整个表单然后拒绝它并将它们发送回一个缺少复杂双密码字段值的表单,并让他们重做验证码,或者更糟的是将他们的所有内容都清空无效的输入

我试过这个正则表达式

^(04\d{2}\s\d{3}\s\d{3})$

在正则表达式上测试

对于尼日利亚电话号码,以下正则表达式模式适用[0]([7-9][0]|[8][0-1])[0-9]{8} 只需将其粘贴到您的正则表达式匹配中

尼日利亚电话号码的正则表达式

没有间距

 /^234[0-9]{10}$/

有间距

/^234\s[0-9]{10}$/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM