電話番号(+918172014908のようなパターンの電話番号があります)の検証には、libphonenumber.jarファイルを使用します。国によって電話番号が有効かどうかを確認します。私はこれを使います:-
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
PhoneNumber numberProto = phoneUtil.parse("phone_number", "");
phoneUtil.isValidNumber(numberProto) == true ? "valid" : "phone no not valid"
正常に動作します。ただし、このjarファイルは少しメモリを消費します。libphonenumber.jarを使用せずに電話番号形式の検証を確認する別の方法はありますか???何か提案できますか???
この答えはあなたを助けるかもしれません: https://stackoverflow.com/a/5959341
文字列を検証するには、次を使用します
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+))?$"
これを試して:
public static boolean isValidPhoneNo(CharSequence iPhoneNo) {
return !TextUtils.isEmpty(iPhoneNo) &&
Patterns.PHONE.matcher(iPhoneNo).matches();
}
単純なregex
を使用できます。電話番号の形式が012-1234567
だとしましょう
\\d{3}-\\d{7}
を使用してそれらを検証できます。
例えば:
String number = "012-1234567";
Pattern pattern = Pattern.compile("\\d{3}-\\d{7}");
Matcher matcher = pattern.matcher(number);
if (matcher.matches()) {
System.out.println("Phone Number Valid");
}
これを試して:
/**
* 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("-"));
}
});
}