Java 如何从telephony manager检查电话号码格式是否有效?

Java 如何从telephony manager检查电话号码格式是否有效?,java,android,validation,Java,Android,Validation,为了检查电话号码(我有像+918172014908这样的模式电话号码)验证,我使用libphonenumber.jar文件。。 它会根据国家/地区检查电话号码是否有效。 我用这个:-- 工作正常。但是这个jar文件需要一些内存。。 有没有其他方法可以在没有libphonenumber.jar的情况下检查电话号码格式验证??? 你能给我一些建议吗?你可以用一个简单的正则表达式。假设我的电话号码格式为012-1234567 您可以使用\\d{3}-\\d{7}来验证它们 例如: 试试这个: publ

为了检查电话号码(我有像+918172014908这样的模式电话号码)验证,我使用libphonenumber.jar文件。。 它会根据国家/地区检查电话号码是否有效。 我用这个:--

工作正常。但是这个jar文件需要一些内存。。 有没有其他方法可以在没有libphonenumber.jar的情况下检查电话号码格式验证???
你能给我一些建议吗?

你可以用一个简单的
正则表达式。假设我的电话号码格式为
012-1234567

您可以使用
\\d{3}-\\d{7}
来验证它们

例如:

试试这个:

public static boolean isValidPhoneNo(CharSequence iPhoneNo) {
    return !TextUtils.isEmpty(iPhoneNo) &&
         Patterns.PHONE.matcher(iPhoneNo).matches();
}
/**
 * This method is used to set filter type of us phone number.
 * @param phone
 */
 public static void setFilterTypeOfUSPhoneNumber(final TextView phone){

        InputFilter filter = new InputFilter() { 
            public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 
                    String pattern = "0123456789()- ";
                    for (int i = start; i < end; i++) { 
                            if (pattern.indexOf(source.charAt(i)) < 0 ||
                                    source.length() > 14) { 
                                    return ""; 
                            } 
                    } 
                    return null; 
            } 
        }; 

        phone.setFilters(new InputFilter[]{filter ,new InputFilter.LengthFilter(14)});
        phone.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {}

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

            @Override
            public void afterTextChanged(Editable s) {

                if(s.length() > 1){

                    if(s.length() < 5){
                        if(s.toString().indexOf("(") != 0 ||
                                checkSpecialCharsPositions(s.toString())){
                            String str = s.toString();
                            str = replaceStrings(str);
                            str = "("+str;
                            s.clear();
                            s.append(str);
                            phone.setText(s);

                        }
                    }
                    else if(s.length() < 10){
                        if(s.toString().indexOf("(") != 0 ||
                                s.toString().indexOf(")") != 4 ||
                                checkSpecialCharsPositions(s.toString())){
                            String str = s.toString();
                            str = replaceStrings(str);
                            str = "("+str.substring(0, 3)+") "+str.substring(3);
                            s.clear();
                            s.append(str);
                            phone.setText(s);
                        }
                    }
                    else {
                        if(s.toString().indexOf("(") != 0 ||
                                s.toString().indexOf(")") != 4 ||
                                s.toString().indexOf("-") != 9 ||
                                checkSpecialCharsPositions(s.toString())){

                            String str = s.toString();
                            str = replaceStrings(str);
                            str = "("+str.substring(0, 3)+") "+str.substring(3,6) + "-" + str.substring(6);
                            s.clear();
                            s.append(str);
                            phone.setText(s);
                        }
                    }
                }
                Selection.setSelection(s,s.length());
            }

            private String replaceStrings(String str){
                str = str.replace("(", "");
                str = str.replace(")", "");
                str = str.replace(" ", "");
                str = str.replace("-", "");
                return str;
            }

            private boolean checkSpecialCharsPositions(String str){

                return (str.indexOf("(") != str.lastIndexOf("(") ||
                        str.indexOf(")") != str.lastIndexOf(")") ||
                        str.indexOf("-") != str.lastIndexOf("-"));
            }
        });

    }
试试这个:

public static boolean isValidPhoneNo(CharSequence iPhoneNo) {
    return !TextUtils.isEmpty(iPhoneNo) &&
         Patterns.PHONE.matcher(iPhoneNo).matches();
}
/**
 * This method is used to set filter type of us phone number.
 * @param phone
 */
 public static void setFilterTypeOfUSPhoneNumber(final TextView phone){

        InputFilter filter = new InputFilter() { 
            public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 
                    String pattern = "0123456789()- ";
                    for (int i = start; i < end; i++) { 
                            if (pattern.indexOf(source.charAt(i)) < 0 ||
                                    source.length() > 14) { 
                                    return ""; 
                            } 
                    } 
                    return null; 
            } 
        }; 

        phone.setFilters(new InputFilter[]{filter ,new InputFilter.LengthFilter(14)});
        phone.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {}

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

            @Override
            public void afterTextChanged(Editable s) {

                if(s.length() > 1){

                    if(s.length() < 5){
                        if(s.toString().indexOf("(") != 0 ||
                                checkSpecialCharsPositions(s.toString())){
                            String str = s.toString();
                            str = replaceStrings(str);
                            str = "("+str;
                            s.clear();
                            s.append(str);
                            phone.setText(s);

                        }
                    }
                    else if(s.length() < 10){
                        if(s.toString().indexOf("(") != 0 ||
                                s.toString().indexOf(")") != 4 ||
                                checkSpecialCharsPositions(s.toString())){
                            String str = s.toString();
                            str = replaceStrings(str);
                            str = "("+str.substring(0, 3)+") "+str.substring(3);
                            s.clear();
                            s.append(str);
                            phone.setText(s);
                        }
                    }
                    else {
                        if(s.toString().indexOf("(") != 0 ||
                                s.toString().indexOf(")") != 4 ||
                                s.toString().indexOf("-") != 9 ||
                                checkSpecialCharsPositions(s.toString())){

                            String str = s.toString();
                            str = replaceStrings(str);
                            str = "("+str.substring(0, 3)+") "+str.substring(3,6) + "-" + str.substring(6);
                            s.clear();
                            s.append(str);
                            phone.setText(s);
                        }
                    }
                }
                Selection.setSelection(s,s.length());
            }

            private String replaceStrings(String str){
                str = str.replace("(", "");
                str = str.replace(")", "");
                str = str.replace(" ", "");
                str = str.replace("-", "");
                return str;
            }

            private boolean checkSpecialCharsPositions(String str){

                return (str.indexOf("(") != str.lastIndexOf("(") ||
                        str.indexOf(")") != str.lastIndexOf(")") ||
                        str.indexOf("-") != str.lastIndexOf("-"));
            }
        });

    }
/**
*此方法用于设置美国电话号码的过滤类型。
*@param电话
*/
公共静态无效设置过滤器类型PhoneNumber(最终文本视图手机){
InputFilter=新的InputFilter(){
公共CharSequence筛选器(CharSequence源、int开始、int结束、跨区目标、int开始、int结束){
字符串模式=“0123456789()-”;
对于(inti=start;i14){
返回“”;
} 
} 
返回null;
} 
}; 
setFilters(新的InputFilter[]{filter,新的InputFilter.LengthFilter(14)});
phone.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列,int start,int before,int count){}
@凌驾
public void beforeTextChanged(字符序列s、int start、int count、int after){}
@凌驾
公共无效后文本已更改(可编辑){
如果(s.长度()>1){
如果(s.长度()<5){
如果(s.toString().indexOf(“”)=0||
检查特殊定位(s.toString()){
字符串str=s.toString();
str=replaceStrings(str);
str=“(”+str;
s、 清除();
s、 追加(str);
phone.setText(s);
}
}
否则如果(s.长度()<10){
如果(s.toString().indexOf(“”)=0||
s、 toString().indexOf(“)”)=4||
检查特殊定位(s.toString()){
字符串str=s.toString();
str=replaceStrings(str);
str=“(“+str.substring(0,3)+”)+str.substring(3);
s、 清除();
s、 追加(str);
phone.setText(s);
}
}
否则{
如果(s.toString().indexOf(“”)=0||
s、 toString().indexOf(“)”)=4||
s、 toString().indexOf(“-”)=9||
检查特殊定位(s.toString()){
字符串str=s.toString();
str=replaceStrings(str);
str=“(“+str.substring(0,3)+”)“+str.substring(3,6)+”-“+str.substring(6);
s、 清除();
s、 追加(str);
phone.setText(s);
}
}
}
Selection.setSelection(s,s.length());
}
私有字符串替换字符串(字符串str){
str=str.replace(“(”,”);
str=str.replace(“)”,“);
str=str.replace(“,”);
str=str.replace(“-”,”);
返回str;
}
专用布尔检查特殊字符位置(字符串str){
返回(str.indexOf(“”)=str.lastIndexOf(“”)||
str.indexOf(“”)!=str.lastIndexOf(“”)||
str.indexOf(“-”)=str.lastIndexOf(“-”);
}
});
}

这个答案可能会帮助您:

要验证字符串,请使用

if (setNum.matches(regexStr))
where regexStr can be:

//matches numbers only
String regexStr = "^[0-9]*$"

//matches 10-digit numbers only
String regexStr = "^[0-9]{10}$"

//matches numbers and dashes, any order really.
String regexStr = "^[0-9\\-]*$"

//matches 9999999999, 1-999-999-9999 and 999-999-9999
String regexStr = "^(1\\-)?[0-9]{3}\\-?[0-9]{3}\\-?[0-9]{4}$" 
在美国,有一个很长的正则表达式来验证电话(7到10位数,允许扩展,等等)。来源于这个答案:一个用于电话号码验证的综合正则表达式

String regexStr = "^(?:(?:\\+?1\\s*(?:[.-]\\s*)?)?(?:\\(\\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\\s*\\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\\s*(?:[.-]\\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\\s*(?:[.-]\\s*)?([0-9]{4})(?:\\s*(?:#|x\\.?|ext\\.?|extension)\\s*(\\d+))?$"

考虑到有关电话号码格式的这些事实:-

  • 国家代码前缀以“+”开头,有1到3位数字
  • 号码的最后一部分,也称为订户号码,是所有号码中的4位数字
  • 大多数国家在排除国家代码后都有10位数的电话号码。一般观察结果是,排除国家代码后,所有国家的电话号码都在8到11位数之间
  • 让我们打破规则,明白

    • ^
      表达式的开头
    • (\\+\\d{1,3}()?)?
      是国家代码在1到3位数字之间的可选匹配,前缀为“+”符号,后跟空格或无空格
    • (\\(\\d{1,3}\)\\\d{1,3}
      是一组必须的数字,包括1到3位,后面有或没有括号,后面有连字符、空格或没有空格
    • \\d{3,4}[-.]?
      是由3或4位数字组成的强制组,后跟连字符、空格或无空格
    • \\d{4}
      是最后4位数字的必填组
    • $
      表达式结束
    此正则表达式模式匹配大多数国家/地区的电话号码格式,包括:-

            String Afghanistan      = "+93 30 539-0605";
            String Australia        = "+61 2 1255-3456";
            String China            = "+86 (20) 1255-3456";
            String Germany          = "+49 351 125-3456";
            String India            = "+91 9876543210";
            String Indonesia        = "+62 21 6539-0605";
            String Iran             = "+98 (515) 539-0605";
            String Italy            = "+39 06 5398-0605";
            String NewZealand       = "+64 3 539-0605";
            String Philippines      = "+63 35 539-0605";
            String Singapore        = "+65 6396 0605";
            String Thailand         = "+66 2 123 4567";
            String UK               = "+44 141 222-3344";
            String USA              = "+1 (212) 555-3456";
            String Vietnam          = "+84 35 539-0605";
    
    如果您了解上述正则表达式,则还可以创建特定于国家/地区的正则表达式模式来验证电话号码:-

    String indiaRegex = "^(\\+\\d{2}( )?)?((\\(\\d{3}\\))|\\d{3})[- .]?\\d{3}[- .]?\\d{4}$";
    String singaporeRegex = "^(\\+\\d{2}( )?)?\\d{4}[- .]?\\d{4}$";
    
    资料来源:

    你可以这样做,但现在不行了
    String indiaRegex = "^(\\+\\d{2}( )?)?((\\(\\d{3}\\))|\\d{3})[- .]?\\d{3}[- .]?\\d{4}$";
    String singaporeRegex = "^(\\+\\d{2}( )?)?\\d{4}[- .]?\\d{4}$";