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

java正则表达式验证

关于如何在不同国家(例如美国,美国)使用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

java正则表达式验证

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

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

相关文章

漫画:什么是B-树

转载自 玻璃猫 程序员小灰 本文提到的「B-树」,就是「B树」,都是 B-tree 的翻译,里面不是减号-,是连接符-。因为有人把 B-tree 翻成 「B-树」,让人以为「B树」和「B-树」是两种树,实际上两者就是同一种树。…

tomcat(4)Tomcat的默认连接器

【0】README0.0)本文部分文字描述转自:“深入剖析tomcat”,旨在学习 tomat(4)Tomat的默认连接器 的基础知识;0.1)Tomcat中的连接器是一个独立的模块,可以插入到servlet容器中,而且还有很多连接器…

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

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

漫画:什么是B+树

转载自 玻璃猫 程序员小灰这一次我们来介绍 B 树。一个m阶的B树具有如下几个特征&#xff1a; 1.根结点至少有两个子女。 2.每个中间节点都包含k-1个元素和k个孩子&#xff0c;其中 m/2 < k < m 3.每一个叶子节点都包含k-1个元素&#xff0c;其中 m/2 < k < m 4.所…

drools 规则流_约束流–没有Drools规则语言的现代Java约束

drools 规则流传统上&#xff0c;要使用OptaPlanner进行扩展&#xff0c;您必须学习DRL。 不再。 借助受Java 8 Streams和SQL启发的新Constraints Streams API&#xff0c;您现在可以用Java &#xff08;或Kotlin或Scala&#xff09; 编写约束&#xff0c;并且仍然可以从增量计…

char类型和Unicode编码

【0】README0.1&#xff09;本文对 char类型和Unicode编码 的总结并不完整&#xff0c;仅供参考&#xff1b;0.2&#xff09;本文获取Unicode辅助字符的代码点的idea转自&#xff1a; http://blog.csdn.net/xujinsmile/article/details/8526387 &#xff0c; http://bbs.csdn.n…

漫画:什么是一致性哈希

转载自 玻璃猫 程序员小灰一年之前——未来两年内&#xff0c;系统预估的总订单数量可达一亿条左右。 按Mysql单表存储500万条记录来算&#xff0c;暂时不必分库&#xff0c;单库30个分表是比较合适的水平分表方案。 于是小灰设计了这样的分表逻辑&#xff1a; 订单表创建单库3…

小程序真机测试错误代码_测试不充分:知道您的代码是否真的可以投入生产的5种方法...

小程序真机测试错误代码当今的企业都在提高软件交付速度。 但是&#xff0c;发布周期较短时&#xff0c;通常会牺牲代码质量。 当今的DevOps和QA团队承受着防止代码缺陷进入生产的压力&#xff0c;但他们还需要管理空前的工作负载&#xff0c;并且需要比以往更少的时间和资源来…

tomcat(5)servlet容器

【0】README0.0&#xff09;本文部分文字描述转自&#xff1a;“深入剖析tomcat”&#xff0c;旨在学习 tomcat(5)servlet容器 的基础知识&#xff1b;0.1&#xff09;intro to servlet容器&#xff1a;servlet容器是用来处理请求servlet资源&#xff0c;并为web客户端填充resp…

漫画算法:如何判断链表有环

转载自 玻璃猫 程序员小灰 大四毕业前夕&#xff0c;计算机学院&#xff0c; 正在四处求职的小灰碰到了同系的学霸大黄…… 小灰边说边回忆着上周去面试的情形…… 有一个单向链表&#xff0c;链表当中有可能出现“环”&#xff0c;就像下图这样。如何用程序判断出这个链表是…

jdk 加密_使用JDK的密码流的加密怪癖(以及该怎么做)

jdk 加密在我们的日常工作中&#xff0c;我们经常遇到经常性的主题&#xff0c;即将数据&#xff08;例如文件&#xff09;从一个位置传输到另一个位置。 这听起来像是一个非常简单的任务&#xff0c;但让我们通过声明这些文件可能包含机密信息并可以通过非安全的通信渠道进行传…

tomcat(5)servlet容器(lastest version)

【0】README0.0&#xff09;本文部分文字描述转自&#xff1a;“深入剖析tomcat”&#xff0c;旨在学习 tomcat(5)servlet容器 的基础知识&#xff1b;0.1&#xff09;intro to servlet容器&#xff1a;servlet容器是用来处理请求servlet资源&#xff0c;并为web客户端填充resp…

漫画:什么是跳跃表

转载自 玻璃猫 程序员小灰这是发生在很多年以前的故事......几天以前......几天之后......拍卖行的商品总数量有几十万件&#xff0c;对应数据库商品表的几十万条记录。如果是按照商品名称精确查询还好办&#xff0c;可以直接从数据库查出来&#xff0c;最多也就上百条记录。如…

带有Prometheus的弹簧靴和Micrometer第5部分:旋转Prometheus

以前&#xff0c;我们获得了Spring Boot Application适配器&#xff0c;以便为Prometheus公开端点。 该博客将重点介绍如何设置和配置Prometheus&#xff0c;以便为Spring Boot端点提供服务器。 因此&#xff0c;让我们开始使用docker来启动Prometheus服务器。 在继续进行Pr…

漫画:什么是动态规划?(整合版)

转载自 玻璃猫 程序员小灰 ———————————— 题目&#xff1a; 有一座高度是10级台阶的楼梯&#xff0c;从下往上走&#xff0c;每跨一步只能向上1级或者2级台阶。要求用程序来求出一共有多少种走法。 比如&#xff0c;每次走1级台阶&#xff0c;一共走10步&#xff…

tomcat(6)生命周期

【0】README0.1&#xff09;本文部分文字描述转自“深入剖析tomcat”&#xff0c;旨在学习 “tomcat生命周期” 的基础知识&#xff1b;0.2&#xff09;for source code, please visit https://github.com/pacosonTang/HowTomcatWorks/tree/master/chapter6 0.3&#xff09;温…

移位操作提高代码的可读性_本地记录或类,以提高流操作的可读性

移位操作提高代码的可读性Java 14带有Records的预览语言功能—一种特殊的轻量级类&#xff0c;可以与其他语言中的类似构造进行比较&#xff0c;例如C&#xff03;中的record类&#xff0c;Kotlin中的data类和Scala中的case类。 A&#xff09;已经有许多博客文章解释Java 14记…

漫画算法:无序数组排序后的最大相邻差值

转载自 玻璃猫 程序员小灰 小灰一边回忆一边讲述起当时面试的情景...... 题目&#xff1a;有一个无序整型数组&#xff0c;如何求出这个数组排序后的任意两个相邻元素的最大差值&#xff1f;要求时间和空间复杂度尽可能低。&#xff08;例如&#xff1a;无序数组 2,3,1,4,6&…

serv-u 数据备份_如何使用用户数据脚本在EC2实例上安装Apache Web Server

serv-u 数据备份你好朋友&#xff0c; 在本教程中&#xff0c;我们将看到如何使用用户数据脚本在EC2实例上安装Apache Web Server。 在我以前的教程之一中&#xff0c;我已经解释了如何使用AWS控制台启动EC2实例。如果您还没有完成该操作&#xff0c;我建议您先进行一下操作。…

哈儿小波分解和重构(降维和升维)实现算法

【0】README0.1&#xff09;本文旨在讲解 哈儿小波变换&#xff08;分解和重构&#xff09;进行数据的降维和升维&#xff1b;【timestamp: 1703281610】时隔几个月再来review 哈儿小波变换算法的具体思路&#xff1a;1&#xff09;分解降维&#xff1a;首先对所有item进行分解…