regex - 如何为特定格式构建正则表达式,在版本中运行良好
问题描述
我必须为这种格式做一个正则表达式。
002-251285-0008P
前三位数字是区号,可以是任何数字,但只有 3 位数字。之后且仅在我可以添加“-”之后。然后这六位数字是两位数 25 天、12 月和 85 年的日期(最后两位数字是 1985 年),之后我可以添加“-”。最后一组是由 4 个数字和一个字母组成的另一个代码。
我想在编辑文本字段时进行检查。但总有一些东西出现。我会尝试一些尝试,但诸如“我可以在开头添加'-'”或“在我拥有完整的格式之前它不匹配,因此永远不会写入文本字段”
^\$|^([0-9]{0,3})(\\-)?([0-9]{0,6})\$
^\$|^([0-9]{3})(\\-[0-9]{0,6})\$
他们不完整,他们只是第一个分组,但是或者他们很严格,不允许我输入只是数字,或者他们很软,允许我在开始时输入“-”。
每一个帮助表示赞赏。
编辑
这是我如何使用正则表达式
在这里,我声明了我所有的正则表达式字符串:
class Regex{
String regexNumerocondosdecimales = "^\$|^(0|([1-9][0-9]{0,3}))(\\.[0-9]{0,2})?\$";
String regexSoloLetrasyEpacios = "[a-zA-Z \s]{0,30}";
String regexSoloNumeros = "^\$|^(0|([1-9][0-9]{0,1}))\$";
String regexCedula = "r'^\d{1,3}(?:-(?:\d{1,6}(?:-(?:\d{1,4}P?)?)?)?)?\$'";
String regexLetrasyNumeros = "[a-zA-Z0-9 \s]{0,200}";
String regexCelular = "^[578] [0-9]{0,7}\$";
}
在这里我设置并验证它
abstract class ValidadorString{
bool esValido(String value);
}
class ValidadorRegex implements ValidadorString{
final String fuenteRegex;
ValidadorRegex({this.fuenteRegex});
bool esValido(String value){
try{
final regex = RegExp(fuenteRegex);
final matches = regex.allMatches(value);
for(Match match in matches){
if (match.start == 0 && match.end == value.length) {
return true;
}
}
return false;
} catch (e){
assert(false, e.toString());
return true;
}
}
}
解决方案
利用
String regexCedula = '^([0-9]{1,3}(-([0-9]{1,6}(-([0-9]{1,4}[A-Za-z]?)?)?)?)?)?$';
查看正则表达式演示
细节
^
- 字符串的开始([0-9]{1,3}(-([0-9]{1,6}(-([0-9]{1,4}[A-Za-z]?)?)?)?)?)?
- 一个可选的序列[0-9]{1,3}
- 1、2 或 3 位数字(-([0-9]{1,6}(-([0-9]{1,4}[A-Za-z]?)?)?)?)?
- 可选的出现:-
- 一个连字符([0-9]{1,6}(-([0-9]{1,4}[A-Za-z]?)?)?)?
- 可选的出现:[0-9]{1,6}
- 一到六位数(-([0-9]{1,4}[A-Za-z]?)?)?
- 可选的出现:-
- 一个连字符([0-9]{1,4}[A-Za-z]?)?
- 可选出现 1 到 4 位数字,然后是可选的 ASCII 字母
$
- 字符串结束。
推荐阅读
- redis - 用于 Redis 评分排序集的 Hazelcast 和 Apache Ignite 模拟
- java - Java MapReduce 将 2 个字段转换为时间幻灯片
- spring - 如何使用百里香将变量放入 Spring 中的 img src 路径?
- shopware - 在 Shopware 6 中使用 scss 中的资产
- android - RecyclerView OnClickListener 报错 NullParameter
- python - 如何将向量连接成 numpy 矩阵的行?
- xcode - 如何在cmake中设置xcode的newbuild系统?
- vue.js - Vuejs 在特定路线上尝试禁用导航栏和页脚栏的全局组件
- sql - 在SQL中如何比较同一个表中两行的值并找到最高值然后选择它的整行
- javascript - 点击 5 次后禁用下载链接 Wordpress | Javascript | 阿贾克斯