如何在Java中验证电话号码(正则表达式+ Google libphonenumber)

关于如何在不同国家(例如美国,美国)使用Java验证电话号码的快速指南。 带有正则表达式和Google libphonenumber API的示例程序。

1.简介

在本教程中,我们将学习如何在java中验证电话号码 。 这主要是为了验证美国和印度的国家/地区电话号码,但是在看到示例之后,您可以为其他国家/地区开发验证规则。

这是验证移动电话号码的常见要求,因为我们会进行电子邮件地址验证的验证,但是Java没有内置功能来提供此类方法。 但是,我们可以借助正则表达式和带有libphonenumber的google api来实现这一点。

让我们跳入编写示例程序。

2.正则表达式

正则表达式的实现有些棘手,因为电话号码具有多种格式且具有不同的扩展名。

例如,以下是一些常见的写电话号码的方法
美国

 1234567890  123 - 456 - 7890  123 - 456 - 7890 x1234  123 - 456 - 7890 ext1234  ( 123 )- 456 - 7890  123.456 . 7890  123 456 7890 

印度:

9123124123

使用正则表达式验证电话号码

 package com.java.w3schools.blog.java.program.to.libphonenumber;  public class PhoneValidationRegularExpression { public static void main(String[] args) { System.out.println( "Validation for 1234567890 : " + validatePhoneNumber( "1234567890" )); System.out.println( "Validation for 1234 567 890 : " + validatePhoneNumber( "Validation for 1234 567 890 : " + validatePhoneNumber( "1234 567 890" )); System.out.println( "Validation for 123 456 7890 : " + validatePhoneNumber( "Validation for 123 456 7890 : " + validatePhoneNumber( "123 456 7890" )); System.out.println( "Validation for 123-567-8905 : " + validatePhoneNumber( "123-567-8905" )); System.out.println( "Validation for 9866767545 : " + validatePhoneNumber( "9866767545" )); System.out.println( "Validation for 123-456-7890 ext9876 : " + validatePhoneNumber( "123-456-7890 ext9876" )); } private static boolean validatePhoneNumber(String phoneNumber) { // validate phone numbers of format "1234567890" if (phoneNumber.matches( "\\d{10}" )) return true ; // validating phone number with -, . or spaces else if (phoneNumber.matches( "\\d{3}[-\\.\\s]\\d{3}[-\\.\\s]\\d{4}" )) return true ; // validating phone number with extension length from 3 to 5 else if (phoneNumber.matches( "\\d{3}-\\d{3}-\\d{4}\\s(x|(ext))\\d{3,5}" )) return true ; // validating phone number where area code is in braces () else if (phoneNumber.matches( "\\(\\d{3}\\)-\\d{3}-\\d{4}" )) return true ; // Validation for India numbers else if (phoneNumber.matches( "\\d{4}[-\\.\\s]\\d{3}[-\\.\\s]\\d{3}" )) return true ; else if (phoneNumber.matches( "\\(\\d{5}\\)-\\d{3}-\\d{3}" )) return true ; else if (phoneNumber.matches( "\\(\\d{4}\\)-\\d{3}-\\d{3}" )) return true ; // return false if nothing matches the input else return false ; }  } 

输出:

 Validation for 1234567890 : true  Validation for 1234 567 890 : true  Validation for 123 456 7890 : true  Validation for 123 - 567 - 8905 : true  Validation for 9866767545 : true  Validation for 123 - 456 - 7890 ext9876 : true 

3. Google libphonenumber示例

如果您使用正则表达式方法,则需要进行大量测试以涵盖所有极端情况。 但是,如果我们有一些API可以通过适当的测试来提供此功能,那么可以在我们的应用程序中很好地使用它。

Google将 libphonenumber API 作为一个开放源代码库提供,该库提供了诸如解析,格式化,验证和存储国际电话号码的功能

此API经过优化,可在智能手机上运行,​​并且也可用于Android框架。

此API的主要优点是您可以格式化或验证和解析任何国家或地区的手机号码。

PhoneNumberUtil类是用于国际电话号码的实用程序。 功能包括格式化,解析和验证。

 package com.java.w3schools.blog.java.program.to.libphonenumber;  import com.google.i18n.phonenumbers.NumberParseException;  import com.google.i18n.phonenumbers.PhoneNumberUtil;  import com.google.i18n.phonenumbers.Phonenumber;  import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;  public class PhoneValidationWIthGooglelibphonenumberAPI { public static void main(String[] args) throws NumberParseException { PhoneNumberUtil numberUtil = PhoneNumberUtil.getInstance(); PhoneNumber phoneNumber = numberUtil.parse( "9866123456" , "IN" ); boolean isValid = numberUtil.isValidNumber(phoneNumber); System.out.println( "Checking given phone number is vaid : " + isValid); }  } 

输出:

 Checking given phone number is vaid : true 

验证美国或印度电话号码的另一个示例:

样本电话号码

 package com.java.w3schools.blog.java.program.to.libphonenumber;  import com.google.i18n.phonenumbers.NumberParseException;  import com.google.i18n.phonenumbers.PhoneNumberUtil;  import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;  public class PhoneValidationWIthGooglelibphonenumberAPI { public static void main(String[] args) throws NumberParseException { System.out.println( "USA phone number validations: " ); String[] usPhoneNumbers = { "(541) 754-3010" , "+1-541-754-3010" , "1-541-754-3010" , "001-541-754-3010" , "191 541 754 3010" }; validatePhoneNumber(usPhoneNumbers, "US" ); System.out.println( "\nindia phone number validations: " ); String[] indiaPhoneNumbers = { "+91 7503907302" , "9702522865" , "+91–8477812345" , "+91 9999999999" , "+91 9688 123 456" , "+9688 123 456" }; validatePhoneNumber(indiaPhoneNumbers, "IN" ); } private static void validatePhoneNumber(String[] phoneNumbers, String region) throws NumberParseException { PhoneNumberUtil numberUtil = PhoneNumberUtil.getInstance(); for (String number : phoneNumbers) { PhoneNumber phoneNumber = numberUtil.parse(number, region); boolean isValid = numberUtil.isValidNumber(phoneNumber); if (isValid) { System.out.println(number + " is a valid number." ); } else { System.out.println(number + " is a not valid number." ); } } }  } 

输出:

 USA phone number validations:  ( 541 ) 754 - 3010 is a valid number.  + 1 - 541 - 754 - 3010 is a valid number.  1 - 541 - 754 - 3010 is a valid number.  001 - 541 - 754 - 3010 is a not valid number.  191 541 754 3010 is a not valid number.  india phone number validations:  + 91 7503907302 is a valid number.  9702522865 is a valid number.  + 91 – 8477812345 is a valid number.  + 91 9999999999 is a valid number.  + 91 9688 123 456 is a valid number.  + 9688 123 456 is a not valid number. 

PhoneNumberUtil API

5. PhoneNumberType

此API支持以下所有类型的数字

 FIXED_LINE  FIXED_LINE_OR_MOBILE  MOBILE  PAGER  PERSONAL_NUMBER  PREMIUM_RATE  SHARED_COST  TOLL_FREE  UAN  UNKNOWN  VOICEMAIL  VOIP 

PhoneNumberUtil.PhoneNumberType

六,结论

在本文中,我们已经看到了如何使用regex和Google开源api libphonenumber在Java中验证电话号码

GitHub代码

Google API

翻译自: https://www.javacodegeeks.com/2020/04/how-to-validate-phone-numbers-in-java-regular-expression-google-libphonenumber.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql该账户已存在_mysql 查看函数的所属用户和已存在的函数

复现方式:Delete FROM user Where Usertest and Host%;flush privileges;修复流程:1.用root用户删除两个函数,语句分别为DROP FUNCTION IF EXISTS currval;DROP FUNCTION IF EXISTS nextval;2.然后用程序用户(sharding_slave)创建函数&#x…

joo工作流_不要错过使用jOOλ或jOOQ编写Java 8 SQL单行代码的机会

joo工作流越来越多的人通过为他们的业务采用功能性编程来赶上我们平台的最新更新。 在Data Geekery ,我们将Java 8用于jOOQ集成测试,因为将新的Streams API与lambda表达式一起使用使生成临时测试数据变得非常容易。 但是, 我们并不认为JDK提…

session mysql登录实现_PHP+MYSQL+MYSQL+SESSION实现用户登录的实例

这是我写的用户登录界面。session_start();include(menu2.php);require(configywcl.php);//加载配置文件require(functions.php);?>请登录系统if ($username){$passwordmd5($password);$sql"select * from user where username$username and password$password";…

使用OpenSSL加密,使用Java解密,使​​用OpenSSL RSA公钥

抽象 在2017年,我撰写了一个由三部分组成的系列文章,内容涉及选择最佳的哈希和加密算法。 在对该系列进行研究时,我学到了很多有关哈希和加密的知识。 我学到的最重要的事情是,尽管我必须对如何使用最安全的算法进行自我教育&…

axture动画原型制作_Axure制作原型-基础操作

产品原型从类型可以分为手稿、线框图、低保真、高保真几种效果,在制作的时候分为不同场景来决定我们的输出物类型。比如在会议中为了快速的确定产品规划方向,迅速的记录及表达出当前灵感的碰撞,这个时候通常使用手稿的形式快速绘制&#xff0…

有效Java第三版的源代码已更新为使用较新的功能

那些已经阅读了有效Java 第三版的人可能知道与该书相关的源代码可以在GitHub上获得 。 jbloch / efficiency-java-3e-source-code项目拥有1700多个星星,截至撰写本文时,它已被分叉了近800次。 在有效Java的第三版中, Java的版本主要是JDK 8&a…

mysql 远程连接取消权限_MYSQL远程登录权限设置

Mysql默认关闭远程登录权限,如下操作允许用户在任意地点登录:1. 进入mysql,GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY WITH GRANT OPTION;IDENTIFIED BY后跟的是密码,可设为空。2. FLUSH privileges; 更新Mysql为了安…

spring和spring_Spring WebApplicationInitializer和ApplicationContextInitializer的混淆

spring和spring我偶尔会混淆这两个概念-WebApplicationInitializer和ApplicationContextInitializer,并希望描述它们中的每一个,以便为我自己澄清它们。 我以前曾在这里写过有关WebApplicationInitializer的博客。 它仅在符合Servlet 3.0规范的Servlet容…

mybatis mysql demo_SpringBoot(入门Demo,整合mybatis,连接mysql)

1.简介SpringBoot提供一种固定的、约定优于配置风格的框架,使开发者更快地创建基于spring的应用和程序。可以高效的创建基于Spring的应用服务(SpringBoot不是对spring功能的增强,而是可以更快速使用spring)。为微服务spring cloud铺路,可整合…

HttpClient 4 API –获取状态码-getStatusLine()。getStatusCode()示例

在HttpClient API中获取状态代码的快速指南。 getStatusLine()。getStatusCode()示例和相关的错误。 1.简介 在这个非常快速的教程中,我将展示如何使用HttpClient 4获取和验证HTTP响应的StatusCode。 2. Maven依赖 要…

css table嵌套内部table不受外部影响_HTML+CSS网页一揽子(4)

CSS重要属性之浮动基本属性:float:left;左浮动float:right;右浮动float:none;不浮动(一般应用于覆盖既有浮动属性时使用)clear:both;清除浮动对其他元素带来的影响应用场景:(1)网站大的结构布局&#xff1a…

ejb构建_如何使用单例EJB和MBean构建和清除参考数据缓存

ejb构建在我的一个项目中,我需要使用EclipseLink作为ORM框架从Java EE 6 WebLogic环境中的多个源中加载参考数据。 由于我在Java EE世界中找不到与Spring YET的Cacheable相当的注释,因此我不得不编写自己的缓存解决方案。 尽管参考数据几乎不会随时间变化…

mysql ticks_【原创】C# 计时周期数(Ticks)在不同数据库上的实现

动手之前,先来看看 Ticks 在微软官方文档上的定义:注解一个计时周期表示一百纳秒,即一千万分之一秒。1 毫秒内有 10,000 个计时周期,即 1 秒内有 1,000万个计时周期。此属性的值表示自0001年1月1日午夜12:00:00 0:00:00 (公历日期…

在Spring Boot测试中使用Testcontainer进行数据库集成测试

在此博客文章中,我想演示如何在Spring Boot测试中集成Testcontainer以便与数据库一起运行集成测试。 我没有使用Testcontainers的Spring Boot模块。 如何与他们合作,我将在另一篇博客文章中进行介绍。 所有示例都可以在GitHub上找到 。 为什么要使用测试…

php模块安装 pdo_mysql_关于php插件pdo_mysql的安装

今天在做一个商城的连接的时候,需要MpDO验证。需要安装pdo_mysql模块,刚开始按照php扩展模块的安装按照这个安装ZIP,curl都成功了但是安装pdo_mysql却不行,在./configure --with-php-config/usr/local/php/bin/php-config是出现错误。如下che…

java8串行和并行的区别_垃圾收集器–串行,并行,CMS,G1(以及Java 8中的新增功能)...

java8串行和并行的区别4个Java垃圾收集器–错误的选择如何严重影响性能 在2014年,对于大多数开发人员来说,还有两件事仍然是个谜:垃圾收集和了解异性。 由于我对后者知之甚少,所以我认为我会对前者大吃一惊,尤其是因为…

python函数参数学习_python学习笔记-11.函数参数和返回值进阶

1. 函数参数和返回值的作用函数根据有没有参数以及有没有返回值,可以相互组合,共有4种形式:无参数,无返回值无参数,有返回值有参数,无返回值有参数,有返回值定义函数时,是否接收参数…

java spr_Java中的42行代码中的URL缩短器服务(Java(?!)Spring Boot + Redis

java spr显然,编写URL缩短服务是新的“ Hello,world! ”在IoT /微服务/时代的世界中。 一切始于在45行Scala中的URL缩短服务 -整洁的Scala,以Spray和Redis进行调味以进行存储。 紧随其后的是, 在35行Clojure中提供了ur…

python邮件发送哪个好_python发邮件(一)

复习模块如果我们要发送邮件,就需要用到smtplib模块的以下方法:1、import smtplib #引入smtplib模块2、server smtplib.SMTP() #server为变量,通过SMTP指定一个服务器,这样才能把邮件送到另一个服务器,SMTP…

SSL Kafka经纪人从Kafka Mirror Maker迁移到Brooklin的挑战

问题 从卡夫卡镜子制造商转移到布鲁克林有我在这里所写的优势。 但是,进行这种迁移并不容易,因为它本来应该如此。 我面临的主要挑战是:在消费者Kafka经纪人和Brooklin之间建立SSL连接 解 SSL问题 事实证明,这个问题比我预期的要…