Codename One - RegexConstraint检查有效的电话号码

时间:2018-01-28 00:12:17

标签: codenameone

在以下代码中,RegexConstraint不起作用,因为电话号码结果总是不正确。怎么了?我需要检查一个手机号码(没有国家代码)。例如,输入3652312453应该是正确的,但在以下代码中,它被评估为不正确。 我从评论中链接的讨论中复制了正则表达式:我唯一的要求是有效的电话号码。

(注意:这个问题不适用于通用Java,只适用于Codename One。类“CountryCodePicker”扩展了类“Button”:我报告它清楚地表明电话号码和国家代码分开)

sleep

2 个答案:

答案 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 教程:“课程:正则表达式”。