JavaScript中的电话正则表达式

JavaScript中的电话正则表达式,javascript,regex,Javascript,Regex,以下是电话号码的有效格式(注意,可以有前导空格和尾随空格): 555-444-3333 (555)-(444)-(3333) 5554443333 5554443333 5554443333 5554443333 555443333 5554443333 (5554443333) (555-444-3333) 如何在.NET中使用正则表达式或Javascript进行验证?我不会直接使用正则表达式。我会将每个字符复制到一个新字符串中,同时跳过旁接字符、连字符和空格。然后检查结果字符串是否有十个

以下是电话号码的有效格式(注意,可以有前导空格和尾随空格):

  • 555-444-3333
  • (555)-(444)-(3333)
  • 5554443333
  • 5554443333
  • 5554443333
  • 5554443333
  • 555443333
  • 5554443333
  • (5554443333)
  • (555-444-3333)

如何在.NET中使用正则表达式或Javascript进行验证?

我不会直接使用正则表达式。我会将每个字符复制到一个新字符串中,同时跳过旁接字符、连字符和空格。然后检查结果字符串是否有十个字符,所有字符都是数字

我不知道.Net正则表达式,但是大多数正则表达式库都会使用^[0-9]*$来验证字符串是否完全是数字


或者,在扫描字符时,可以使用标准库isdigit()函数逐个检查字符。

我不会直接使用正则表达式。我会将每个字符复制到一个新字符串中,同时跳过旁接字符、连字符和空格。然后检查结果字符串是否有十个字符,所有字符都是数字

我不知道.Net正则表达式,但是大多数正则表达式库都会使用^[0-9]*$来验证字符串是否完全是数字

或者,您可以使用标准库isdigit()函数在扫描字符时逐个检查字符。

试试这个

function isPhoneNumber(x) { 
    return /^[0-9\-\(\)\s]*$/.test(x) && x.replace(/[^0-9]/g,'').length == 10; 
}
我同意一些评论者的担忧,但它符合你的要求

如果字符串包含除数字、连字符、括号或空格以外的任何内容,则测试的前半部分将失败。如果字符串中的位数不是10,测试的后半部分将失败。

试试这个

function isPhoneNumber(x) { 
    return /^[0-9\-\(\)\s]*$/.test(x) && x.replace(/[^0-9]/g,'').length == 10; 
}
我同意一些评论者的担忧,但它符合你的要求


如果字符串包含除数字、连字符、括号或空格以外的任何内容,则测试的前半部分将失败。如果字符串中的位数不是10,则测试的后半部分将失败。

这真的需要严格验证吗?国际号码呢?1-555-444-3333也无效吗?我和乔纳森在一起。此验证不太可能捕获意外输入的错误条目。但这很可能会导致无法输入有效但不寻常的号码。我同意Jonathan和Thilo的观点:我的完整电话号码与建议的模式不匹配。如果你想支持国际号码,请使用下拉菜单,允许用户选择他们的国家,然后根据所选国家的惯例验证编号。虽然这在技术上很简单,但它将非常乏味且容易出错,而且您可能会发现很难为地球上的每个国家提供电话号码格式。@Don,不幸的是,edge案例仍然无法解决这一问题。现实世界的例子:一个人有一个英国的skype电话号码,即使他当时住在日本。如果他在下拉列表中选择日本,他就不能使用他的电话号码。如果他选择英国,那么他的包裹将被邮寄到错误的国家。这真的需要严格的验证吗?国际号码呢?1-555-444-3333也无效吗?我和乔纳森在一起。此验证不太可能捕获意外输入的错误条目。但这很可能会导致无法输入有效但不寻常的号码。我同意Jonathan和Thilo的观点:我的完整电话号码与建议的模式不匹配。如果你想支持国际号码,请使用下拉菜单,允许用户选择他们的国家,然后根据所选国家的惯例验证编号。虽然这在技术上很简单,但它将非常乏味且容易出错,而且您可能会发现很难为地球上的每个国家提供电话号码格式。@Don,不幸的是,edge案例仍然无法解决这一问题。现实世界的例子:一个人有一个英国的skype电话号码,即使他当时住在日本。如果他在下拉列表中选择日本,他就不能使用他的电话号码。如果他选择英国,那么他的包裹将被邮寄到错误的国家。可能只替换括号、破折号和空格,否则555aZ$444~~~~~33%将是有效的。虽然没什么大不了的。也许只替换括号、破折号和空格,否则555aZ$444~~~~33%33是有效的。虽然没什么大不了的。我想到了一个简单的剥离所有非数字的方法,比如s.replace(/[^0-9]/g,”);,然后检查长度是否为10。这假定不会输入1作为第一位数字。但是用户可以复制粘贴一些东西,比如(5554443333)或(555)-(444)-(3333),它应该仍然有效。这只适用于我们的电话号码。我想简单地去掉所有非数字,比如s.replace(/[^0-9]/g');,然后检查长度是否为10。这假定不会输入1作为第一位数字。但是用户可以复制粘贴一些东西,比如(5554443333)或(555)-(444)-(3333),并且应该仍然有效。这只适用于美国电话号码