在以下代码中,RegexConstraint不起作用,因为电话号码结果总是不正确。怎么了?我需要检查一个手机号码(没有国家代码)。例如,输入3652312453应该是正确的,但在以下代码中,它被评估为不正确。 我从评论中链接的讨论中复制了正则表达式:我唯一的要求是有效的电话号码。
(注意:这个问题不适用于通用Java,只适用于Codename One。类“CountryCodePicker”扩展了类“Button”:我报告它清楚地表明电话号码和国家代码分开)
sleep
答案 0 :(得分:1)
[咆哮] 就个人而言,我真的很讨厌正则表达式,因为我发现它除了微不足道的验证之外都不可读。 [/咆哮]
所以我更喜欢这个:
val.addConstraint(phone, new Constraint() {
public boolean isValid(Object value) {
String v = (String)value;
for(int i = 0 ; i < v.length() ; i++) {
char c = v.charAt(i);
if(c >= '0' && c <= '9' || c == '+' || c == '-') {
continue;
}
return false;
}
return true;
}
public String getDefaultFailMessage() {
return "Must be valid phone number";
}
});
但是,我猜测正则表达式失败的原因与斜杠的语法有关:
String phoneRegEx = "^\\(?([0-9]{3})\\)?([ .-]?)([0-9]{3})\\2([0-9]{4})";
答案 1 :(得分:1)
Oracle 的 Java 8 课程中的以下资源帮助我始终定义我需要的 RegEx。花点时间研究它,你会成功的,特别是因为问题似乎出在 Constraint 对象的初始化上。我在这里发帖的前一天遇到了一个问题,并设法优雅地解决了它,这始终是我们的目标。
使用此链接
https://docs.oracle.com/javase/tutorial/essential/regex/
Oracle 教程:“课程:正则表达式”。