java - 支持字母表的 24 小时制时钟的正确正则表达式是什么(java)
问题描述
这是程序:
public static boolean hasValidLengthAndSeparator(String s) {
boolean answer = false;
String text = s;
String pattern = "([01a]?[0-9]+[b]?|2[0-3]+?):[c]?[d]?[0-5]?[0-9]?";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(text);
if (m.find()) {
answer = true;
}
else {
answer = false;
}
return answer;
}
当我进行测试时,“1:30”失败(它返回真,但它不应该)我该如何解决?
解决方案
回答:(?:[01a][\\db]|2[0-9b]):[0-9c][\\dd]
如果长度为 5 且第三个字符是冒号,则正则表达式允许字符串验证为真,否则为假。
通过使用此测试仪:
@Test
public void test09_hasValidLengthAndSeparator() {
final String[] VALID = {"01:30", "ab:cd", "29:99"};
for (int i = 0; i < VALID.length; i++) {
String s = VALID[i];
String error =
String.format("regextest.hasValidLengthAndSeparator(s) returned false for s = %s", s);
assertTrue(error, lab0.hasValidLengthAndSeparator(s));
}
final String[] NOT_VALID = {"", "1:30", "01,23", "29:9"};
for (int i = 0; i < NOT_VALID.length; i++) {
String s = NOT_VALID[i];
String error =
String.format("regextest.hasValidLengthAndSeparator(s) returned true for s = %s", s);
assertFalse(error, regextest.hasValidLengthAndSeparator(s));
}
}
推荐阅读
- r - 基于具有相同维度 (R) 的另一个表为数据透视表创建自定义格式
- java - Spring Boot Broker-Consumer 项目出错
- node.js - NodeJS - 将数据传递给 httpRequest
- java - 在 gradle 脚本中删除特定手机版本的权限
- microsoft-graph-api - 频道 lastModifiedDateTime 完全错误
- reactjs - 元素类型无效:需要一个字符串(用于内置组件)或 webpack 构建后的类/函数
- laravel - Laravel 通过不同的方法发送相同的通知
- string - 如何将字节从 rust 字符串中移出
- python - 从 mongo-db 中的最后一条记录中获取一列值
- flutter - 有什么方法可以在颤振中使用 zefyrEditor 中的验证属性和 onChanged 属性?