電話番号が有効かどうかを確認するにはどうすればよいですか?長さ13までです(文字+
前に)。
それ、どうやったら出来るの?
私はこれを試しました:
String regexStr = "^[0-9]$";
String number=entered_number.getText().toString();
if(entered_number.getText().toString().length()<10 || number.length()>13 || number.matches(regexStr)==false ) {
Toast.makeText(MyDialog.this,"Please enter "+"\n"+" valid phone number",Toast.LENGTH_SHORT).show();
// am_checked=0;
}`
そして、私もこれを試しました:
public boolean isValidPhoneNumber(String number)
{
for (char c : number.toCharArray())
{
if (!VALID_CHARS.contains(c))
{
return false;
}
}
// All characters were valid
return true;
}
両方とも機能していません。
入力方式: + sign to be accepted and from 0-9 numbers and length b/w 10-13 and should not accept other characters
指定したルールが与えられた場合:
長さ13までで、文字+正面を含みます。
(また、コードに最小長10を組み込む)
次のような正規表現が必要になります。
_^\+[0-9]{10,13}$
_
正規表現でエンコードされた最小長と最大長を使用すると、if()
ブロックからこれらの条件を削除できます。
トピック外:10から13の範囲は、国際電話番号フィールドには制限が多すぎることを示唆します。これより長いものと短いものの両方の有効な番号を見つけることはほぼ確実です。 8〜20の範囲が安全であることをお勧めします。
[編集] OPは、エスケープシーケンスのために上記の正規表現が機能しないことを示しています。理由はわかりませんが、代替手段は次のとおりです。
_^[+][0-9]{10,13}$
_
[編集2] OPは、_+
_記号をオプションにする必要があることを追加しました。この場合、正規表現には_+
_の後に疑問符が必要なので、上記の例は次のようになります。
_^[+]?[0-9]{10,13}$
_
番号が有効な電話番号かどうかを検出するには、PhoneNumberUtils
のisGlobalPhoneNumber()
メソッドを使用します。
System.out.println("....g1..."+PhoneNumberUtils.isGlobalPhoneNumber("+912012185234"));
System.out.println("....g2..."+PhoneNumberUtils.isGlobalPhoneNumber("120121852f4"));
2番目の電話番号にはf
が含まれているため、最初のprintステートメントの結果はtrueですが、2番目の結果はfalseです。
Androidの特定の地域の電話番号を検証するには、Googleの libPhoneNumber と、例として次のコードを使用します。
public boolean isPhoneNumberValid(String phoneNumber, String countryCode)
{
//NOTE: This should probably be a member variable.
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
try
{
PhoneNumber numberProto = phoneUtil.parse(phoneNumber, countryCode);
return phoneUtil.isValidNumber(numberProto);
}
catch (NumberParseException e)
{
System.err.println("NumberParseException was thrown: " + e.toString());
}
return false;
}
Androidの組み込みの Patterns
を使用できます。
public boolean validCellPhone(String number)
{
return Android.util.Patterns.PHONE.matcher(number).matches();
}
このパターンは、何かが実際に電話番号であるかどうかを検証するためではなく、任意のテキストの電話番号のように見えるものを検索するためのものです。それは合法的な電話番号である多くのものを逃します。
パターンは次と一致します。
- オプションで、+記号の直後に1つ以上の数字が続きます。スペース、ドット、またはダッシュが後に続く場合があります。
- オプションで、スペース、ドット、またはダッシュで区切られた括弧内の数字のセット。
- 数字で始まり、数字で終わる文字列。数字、スペース、ドット、ダッシュを含む。
電話番号の検証を次のように確認することもできます
/**
* Validation of Phone Number
*/
public final static boolean isValidPhoneNumber(CharSequence target) {
if (target == null || target.length() < 6 || target.length() > 13) {
return false;
} else {
return Android.util.Patterns.PHONE.matcher(target).matches();
}
}
電話の形式が説明されている形式のいずれかである場合は、 PhoneNumberUtils
を使用できます。どのユーティリティ関数もニーズに合わない場合は、通常の表現を使用してください。
パターンを使用して検証できます。
Android.util.Patterns.PHONE
public class GeneralUtils {
private static boolean isValidPhoneNumber(String phoneNumber) {
return !TextUtils.isEmpty(phoneNumber) && Android.util.Patterns.PHONE.matcher(phoneNumber).matches();
}
}
^\+?\(?[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})?
ここでケースを確認してください: https://regex101.com/r/DuYT9f/1
Kotlinで簡潔に行う方法は次のとおりです。
fun String.isPhoneNumber() =
length in 4..10 && all { it.isDigit() }
国際電話番号の検証に最適なソリューションがあり、ライブラリの下に国コードを選択することは正当化されますすべてのカスタムUIおよび機能CountryCodePickerProjectに最適なライブラリ
String validNumber = "^[+]?[0-9]{8,15}$";
if (number.matches(validNumber)) {
Uri call = Uri.parse("tel:" + number);
Intent intent = new Intent(Intent.ACTION_DIAL, call);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
return;
} else {
Toast.makeText(EditorActivity.this, "no phone number available", Toast.LENGTH_SHORT).show();
}
^\+201[0|1|2|5][0-9]{8}
この正規表現はエジプトの携帯電話番号と一致します