java 电话号码验证

2023-11-27

这是我的问题:

为电话号码创建一个构造函数,给定本地号码的 xxx-xxx-xxxx 或 xxx-xxxx 形式的字符串。如果格式无效,则抛出异常。

所以我想使用正则表达式来验证它,但我不知道我做得是否正确。另外我必须抛出什么样的异常?我需要创建自己的例外吗?

    public TelephoneNumber(String aString){
        if(isPhoneNumberValid(aString)==true){
            StringTokenizer tokens = new StringTokenizer("-");
            if(tokens.countTokens()==3){
                areaCode = Integer.parseInt(tokens.nextToken());
                exchangeCode = Integer.parseInt(tokens.nextToken());
                number = Integer.parseInt(tokens.nextToken());
            }
            else if(tokens.countTokens()==2){
                exchangeCode = Integer.parseInt(tokens.nextToken());
                number = Integer.parseInt(tokens.nextToken());
            }
            else{
                //throw an excemption here
            }
        }

    }


 public static boolean isPhoneNumberValid(String phoneNumber){
     boolean isValid = false;

     //Initialize reg ex for phone number.
    String expression = "(\\d{3})(\\[-])(\\d{4})$";
    CharSequence inputStr = phoneNumber;
    Pattern pattern = Pattern.compile(expression);
    Matcher matcher = pattern.matcher(inputStr);
    if(matcher.matches()){
        isValid = true;
     }
        return isValid;
    }

嗨,抱歉,是的,这是作业。对于此分配,唯一有效的格式是 xxx-xxx-xxxx 和 xxx-xxxx,所有其他格式 (xxx)xxx-xxxx 或 xxxxxxxxxx 在这种情况下均无效。

我想知道我的正则表达式是否正确


所以我想使用正则表达式来验证它,但我不知道我做得是否正确。

确实看起来过于复杂。还有,匹配xxx-xxx-xxxx or xxx-xxxx where x是一个数字可以做得更好"(\\d{3}-){1,2}\\d{4}"。要了解有关正则表达式的更多信息,我建议阅读http://正则表达式.info.

另外我必须抛出什么样的异常?我需要创建自己的例外吗?

A ValidatorException看起来很简单。

public static void isPhoneNumberValid(String phoneNumber) throws ValidatorException {
    if (!phoneNumber.matches(regex)) {
        throws ValidatorException("Invalid phone number");
    }
}

如果您出于某种原因不想自己创建一个,那么我可能会选择IllegalArgumentException,但我仍然不建议这样做。

也就是说,这种验证当然不涵盖国际和/或外部电话号码。除非这确实是家庭作业,否则我建议重新考虑验证。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java 电话号码验证 的相关文章

  • 帮助我避免 JPA、Hibernate 和 MySQL 的连接超时

    我正在使用 JPA Hibernate 作为提供者 Glassfish 和 MySQL 开发中一切都运行良好 但是当我将应用程序部署到测试服务器并让它运行 大部分空闲 过夜时 我通常会在早上遇到这样的情况 2011 03 09T15 06
  • jpa2 CriteriaBuilder order by “ORDER BY 表达式必须出现在选择列表中”

    我正在写一个查询标准生成器 但无法添加order by子句 因为它随消息一起抛出错误ORDER BY 表达式必须出现在选择列表中这是我的实体 public class A Integer aId ManyToOne JoinColumn n
  • 从字符串生成密钥?

    我需要从字符串生成一个密钥 以便我始终可以从同一字符串创建相同的密钥 具体来说是一个Key对象 这样我就可以用它来创建Cipher进而创建SealedObject 这在 Java 中可行吗 我应该考虑什么类 方法组合才能做到这一点 对于 A
  • AffineTransform.rotate() - 如何同时缩放、旋转和缩放?

    我有以下代码 它可以完成我想要绘制一个上面有一些棋子的棋盘的 第一部分 Image pieceImage getImage currentPiece int pieceHeight pieceImage getHeight null dou
  • MediaPlayer.create() 始终返回 null

    我以前用过媒体播放器 从来没有遇到过这个问题 每当我尝试使用 MediaPlayer create 时 该方法都会给我 null 并且我无法播放声音 我有什么遗漏的吗 public class Game extends Activity p
  • 强制 Java 最低版本以“java -version:”运行在 Windows 上不起作用

    我想强制应用程序运行的 JVM 最低版本为 1 6 或更高版本 即 1 6 我的理解是 您可以使用 version 命令行参数来执行此操作 我尝试了一下 在Linux下似乎可以正常工作 但在Windows下却不行 LINUX 我在 Linu
  • 在R中提取其他两个字符串之间的字符串

    我试图找到一种简单的方法来提取出现在两个已知子字符串之间的未知子字符串 可以是任何内容 例如 我有一个字符串 a lt anything goes here STR1 GET ME STR2 anything goes here 我需要提取
  • 如何在 JdbcTemplate 中创建 mySQL 存储过程

    背景 为了解决 MySql 中某些语句只允许在存储过程中出现的问题 我尝试在 JdbcTemplate 提交的 sql 中创建 运行然后删除存储过程 一个简单的例子是 这恰好是在 Spring Boot 中 Service public c
  • 反应式 Spring Webflux REST 控制器内部重定向

    我正在为 spring 反应项目创建简单的控制器服务器 在设置重定向到另一个位置时 我在调用时发现错误http localhost 8080 There was an unexpected error type Internal Serve
  • 两条腿的 OAuth 和 Gmail Atom feed

    我们正在尝试让 2 legged OAuth 与 Gmail Atom feed 一起使用 我们使用 John Kristian Praveen Alavilli 和 Dirk Ba lfanz 贡献的 Java 库 http oauth
  • java中日期转换dd-MMM-yyyy到dd-MM-yyyy

    在Java中将23 Mar 2011转换为23 03 2011的最简单方法是什么 感谢大家 这似乎解决了这个问题 try Calendar cal Calendar getInstance cal setTime new SimpleDat
  • 更新分页。是否可以?

    他们是否存在一些方法来处理更新分页 例如我有 100 行类型 Id private Integer id Column private boolean flag Column private Date last 一开始它们看起来像 id f
  • 删除 .htaccess 中 URL 中各处的多组斜杠

    我目前有一个网站 访客可以访问每个网址 并使用任意数量的斜杠来分隔文件夹名称 例如 如果 URL 应该是 http example com one two three four 然后用户可以通过以下任意方式访问同一页面 http examp
  • 如何在 Log4j2 - JSON 布局中自定义或删除默认属性

    In Spring Boot 2我已配置的应用程序Log4j2 with JsonLayout像下面这样
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • AndroidAnnotations 和 Dagger

    我正在尝试使用 Dagger 注入 Android 带注释的 Activity java lang IllegalArgumentException No inject registered for members com app serv
  • 如何创建具有同等时间元素的 JavaFX 转换?

    我正在尝试 JavaFX 和动画 尤其是PathTransition 我正在创建一个简单的程序 使球 弹跳 而不使用QuadCurveTo班级 到目前为止 这是我的代码 Ellipse ball new Ellipse 375 250 10
  • 获取Java中ResultSet返回的行数

    我用过一个ResultSet返回一定数量的行 我的代码是这样的 ResultSet res getData if res next System out println No Data Found while res next code t
  • 使用 PDFBox 在 Android 中创建 PDF

    我正在尝试通过我的 Android 应用程序创建 PDFPDFBoxapi 但出现以下错误 java lang NoClassDefFoundError org apache pdfbox pdmodel PDDocument 我已经将以下
  • Java 可变 BigInteger 类

    我正在使用 BigIntegers 进行计算 该计算使用一个调用 multiply 大约 1000 亿次的循环 并且从 BigInteger 创建新对象使其非常慢 我希望有人编写或找到了 MutableBigInteger 类 我在 jav

随机推荐

  • 如何使用 Bootstrap 4 实现响应式排版?

    我正在使用 Bootstrap 4 构建响应式 Web 应用程序 与桌面相比 我希望在移动设备上减小所有文本的字体大小 因此我根据 Bootstrap 文档将以下内容添加到我的基本 css 文件中 https getbootstrap co
  • c3p0 连接池是否确保最大池大小?

    我已经经历了几个问题 this有些相关 但没有回答我的问题 c3p0 是否有连接池maxPoolSize确保某个时间的连接数永远不会超过这个限制 如果maxPoolSize 5并且 10 个用户同时开始使用该应用程序 我的应用程序 配置
  • iText:如何在同一文档中插入背景图像以刷新响应

    我正在创建一个 PDF 并编写流作为响应 在写入流之前 我想在所有页面中添加背景图像作为水印 以便通过响应刷新的 PDF 文档是最后一个带水印的文档 嗨 这是我的代码示例 任何帮助将非常感激 private static String ge
  • 使用 Javascript 检测 Flash 应用程序是否正确加载?

    我的产品打开一个 Web 浏览器并将其指向包含本地 Flash 应用程序的 HTML 文件 如何以编程方式检测该文件是否加载成功 如果没有成功则抛出什么异常 有没有办法使用 JavaScript 来做到这一点 从外部检查文件是否存在于磁盘上
  • 用于获取日期的星期几的确定性标量函数

    SQL Server 尝试通过确定性 UDF 获取星期几 我确信这一定是可能的 但无法弄清楚 更新 示例代码 CREATE VIEW V Stuff WITH SCHEMABINDING AS SELECT MD ID MD DateTim
  • Android ImageAdapter 与 Fragment 中的 Gridview

    我有一个带有 gridview 的适配器 它作为一个 Activity 工作 我现在尝试将其放入片段中并转换内容 但它不起作用 当我在 Activity 中包含 IconFragmentSystem 时 当我尝试打开 Activity 时
  • spawnSync /bin/sh ENOBUFS

    Error spawnSync bin sh ENOBUFS 在执行以下行时 非系统地在我的 NodeJs 应用程序中生成 child process execSync cd tmp myFolder tar xjf myArchive t
  • 发送到应用程序的 CTRL-C 单元测试

    I am developing an application handling CTRL C I am producing a signal handler to shut down gracefully threads and other
  • Google Play 内容政策 [关闭]

    Closed 这个问题是无关 目前不接受答案 我刚刚收到一封来自 Google 的电子邮件 告诉我我的一个应用违反了开发者条款 我有 7 天的时间来遵守 他们是这么说的 警告原因 违反内容的垃圾邮件规定 政策 请勿发布重复内容 产品描述不应
  • 查找数组中出现次数最多的元素 [java]

    我必须找到双精度数组中出现次数最多的元素 我是这样做的 int max 0 for int i 0 i lt array length i int count 0 for int j 0 j lt array length j if arr
  • 如何将 Swift 对象序列化或转换为 JSON?

    下面这个类 class User NSManagedObject NSManaged var id Int NSManaged var name String 需要转换为 id 98 name Jon Doe 我尝试手动将对象传递给函数 该
  • 使用 HTTP Post 从客户端流式传输数据

    我想将数据从客户端流式传输到服务器 我的应用程序将音频数据流式传输到服务器 当我开始流式传输时 我不知道音频会持续多长时间 我想通过在记录数据时传输数据来减少延迟 一旦所有数据上传完毕 我就会对其进行处理 所以 我想要的是一个 HTTP P
  • 如何在 UWP 应用中保留 TextBlock 的空白

    如果您只是将 TextBlock 中的 Text 属性的值设置为 例子 请注意 此处有 3 个空格end这个字符串 TextBlock 在 UI 中显示的只是 Example 并且在网上搜索解决方案后 发现有一种方法可以解决这个问题
  • 如何用 C++ 读取和解析 CSV 文件?

    我需要在 C 中加载和使用 CSV 文件数据 此时它实际上可以只是一个逗号分隔的解析器 即不用担心转义新行和逗号 主要需要是一个逐行解析器 每次调用该方法时 它将返回下一行的向量 我发现这篇文章看起来很有前途 http www boost
  • javascript,在开始颜色和结束颜色之间选择一个随机的十六进制颜色

    有什么快速的方法可以实现这一点吗 例如 起始颜色 EEEEEE 和结束颜色 FFFFFF 会产生类似 FEFFEE 的颜色 当然 十六进制被编码为数字 但要使其有意义 您必须首先提取 rgb 组件 function rgb string r
  • php邮件的smtp配置

    我使用 php 邮件功能从我的网站发送邮件 但现在它不起作用 我联系了我们的托管团队 然后他们告诉我使用 smtp 因为他们对服务器做了一些更改 我不知道该怎么做 当前代码 带有 php 邮件功能 如下 任何人都可以帮助我进行与此相关的更改
  • Go 闭包在内存中是如何布局的?

    有关闭包的一般解释 请参见JavaScript 闭包如何工作 Go 闭包到底是如何在内存中布局的 以以下函数为例 type M int func m M Adder amount int func return func m m amoun
  • FileHelpers 和 CSV:当记录可以无限水平扩展时该怎么办

    我正在尝试使用 FileHelpers 解析这种类型的 CSV 文件 Tom 1 2 3 4 5 6 7 8 9 10 Steve 1 2 3 Bob 1 2 3 4 5 6 Cthulhu 1 2 3 4 5 Greg 1 2 3 4 5
  • 使用 Scikit Learn 的 DictVectorizer 时出现 toarray 内存错误

    我正在尝试对我的数据实施 SelectKBest 算法 以从中获得最佳功能 为此 我首先使用 DictVectorizer 预处理数据 该数据由 1061427 行和 15 个特征组成 每个功能都有许多不同的值 我相信由于高基数我遇到了内存
  • java 电话号码验证

    这是我的问题 为电话号码创建一个构造函数 给定本地号码的 xxx xxx xxxx 或 xxx xxxx 形式的字符串 如果格式无效 则抛出异常 所以我想使用正则表达式来验证它 但我不知道我做得是否正确 另外我必须抛出什么样的异常 我需要创