c# - 是否有用于电话号码验证的正则表达式?
问题描述
我正在建立一个新网站,并想验证用户输入的电话号码。我需要使用什么正则表达式来获取格式 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
数字剥离后0400223456
,只需使用字符串子字符串
“容忍你接受的东西,严格你发送的东西”是编写与 HTTP 通信的服务器的口头禅,但适用于任何用户输入都是一件好事;始终致力于从用户那里获取尽可能多的垃圾输入并将其清理以符合您的标准,而不是强迫用户满足它,如果您要强迫用户,请明确告诉他们他们哪里出错了。旨在立即反馈的验证 - 不要让他们提交整个表单然后拒绝它并将它们发送回一个缺少其复杂双密码字段值的人并让他们重做验证码,或者更糟糕的是空白他们的所有无效的输入
推荐阅读
- python - Python MySQL 无法使用包含 25k 条记录的数据集进行更新
- java - 使用 java 和流 API 寻找给定代码片段的改进
- android - Completable 中的单个 delaySubscription 等效项
- java - 带数组的二项式系数
- word2vec - 保存 word2vec 模型会导致文件混乱
- reactjs - 在 React 虚拟化表上实现过滤器
- vector - 使用 gensim 从词袋向量创建 LDA 模型
- php - Woocommerce 的自定义管理员电子邮件主题
- ruby-on-rails - 无法读取未定义的 npm ERR 的属性“地图”!代码 ELIFECYCLE npm 错误!errno 1 fir React 前端/Rails 后端
- excel - 在 Excel VBA 中将 TAB 添加到文本字符串的开头