我必须为此格式做一个正则表达式。
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;
}
}
}
答案 0 :(得分:1)
使用
String regexCedula = '^([0-9]{1,3}(-([0-9]{1,6}(-([0-9]{1,4}[A-Za-z]?)?)?)?)?)?$';
请参见regex demo
详细信息
^
-字符串的开头([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}
-1-6位数字(-([0-9]{1,4}[A-Za-z]?)?)?
-可选出现:-
-连字符([0-9]{1,4}[A-Za-z]?)?
-可选的1到4位数字,然后是可选的ASCII字母$
-字符串的结尾。