如何验证电话号码格式

时间:2014-12-03 04:39:16

标签: android regex validation

我即将创建电话号码格式的验证。格式为10位,包括加号,例如:+0133999504。即使我声明了模式,我试图禁止使用“ - ”符号或任何其他字符,但验证不起作用。还有其他想法或解决方案吗?

1st I declared the string regex:

String PhoneNo;
String PhoneNo_PATTERN ="[\\+]\\d{3}\\d{7}";

2nd I make a if..else statement:
 {
                    Pattern pattern = Pattern.compile(PhoneNo_PATTERN);
                    Matcher matcher = pattern.matcher(PhoneNo);
                    if (!matcher.matches()) 
                    {
                    inputemergencyContactNo.setError("Please enter Emergency Contact No");
                    }
                    else{
                    Toast.makeText(RiderProfile.this, "Please filled in All field", Toast.LENGTH_SHORT).show();
                    }

5 个答案:

答案 0 :(得分:4)

为什么不删除所有非数字,然后计算剩下的数字并将加号放回去?这样,用户可以自由地填写他们想要的电话号码......

String PhoneNo = "+123-456 7890";
String Regex = "[^\\d]";
String PhoneDigits = PhoneNo.replaceAll(Regex, "");
if (PhoneDigits.length()!=10)  
{
    // error message
}
else
{
    PhoneNo = "+";
    PhoneNo = PhoneNo.concat(PhoneDigits); // adding the plus sign

    // validation successful  

}

如果您的应用适合国际使用,请替换

if (!PhoneDigits.length()!=10) 

if(PhoneDigits.length() < 6 || PhoneDigits.length() > 13)

正如Fatti Khan所说。


要在Android EditText Validation and Regex发布的代码中应用此代码,首先在公共类或包含onClick()的类中包含此方法:

public boolean validateNumber(String S) {
    String Regex = "[^\\d]";
    String PhoneDigits = S.replaceAll(Regex, "");
    return (PhoneDigits.length()!=10);
}

并在CreateNewRider类中包含此方法:

protected String tidyNumber(String S) {
    String Regex = "[^\\d]";
    String PhoneDigits = S.replaceAll(Regex, "");
    String Plus = "+";
    return Plus.concat(PhoneDigits);
}

这是验证发生的地方......

@Override
public void onClick(View view) {

    Boolean b = false;
    if(inputfullname.getText().toString().equals("")) b = true;

    else if(... // do this for all fields

    else if(inputmobileNo.getText().toString().equals("")) b=true;
    else if(inputemergencyContactNo.getText().toString().equals("")) b=true;
    else {
        if(validateNumber( inputmobileNo.getText().toString() ) 
            Toast.makeText(RiderProfile.this, "Invalid mobile number", Toast.LENGTH_SHORT).show();

        else if(validateNumber( inputemergencyContactNo.getText().toString() ) 
            Toast.makeText(RiderProfile.this, "Invalid emergency contact number", Toast.LENGTH_SHORT).show();
        else {
            // Validation succesful

            new CreateNewRider().execute();

        }   
    }
    if(b) Toast.makeText(RiderProfile.this, "Please filled in All field", Toast.LENGTH_SHORT).show();
}

然后在CreateNewRider类中使用tidyNumber():

    protected String doInBackground(String... args) {
        String fullname= inputfullname.getText().toString();
        String IC= inputIC.getText().toString();
        String mobileNo= tidyNumber( inputmobileNo.getText().toString() );
        String emergencyContactName= inputemergencyContactName.getText().toString() );
        String emergencyContactNo= tidyNumber( inputemergencyContactNo.getText().toString() );

        ...

答案 1 :(得分:3)

^[\\+]\\d{3}\\d{7}$

使用锚点限制匹配。

^ =&gt;比赛开始

$ =&GT;比赛结束

答案 2 :(得分:3)

根据您指定的规则:

长度为13,包括角色+面前。

(并在代码中加入最小长度为10)

你想要一个看起来像这样的正则表达式:

^\+[0-9]{10,13}$

使用正则表达式编码的最小和最大长度,您可以从if()块中删除这些条件。

偏离主题:我建议10-13的范围对国际电话号码字段来说太有限;您几乎肯定会找到比此更长和更短的有效数字。我建议安全范围为8 - 20。

[编辑] OP声明由于转义序列,上述正则表达式不起作用。不知道为什么,但另一种选择是:

^[+][0-9]{10,13}$

[编辑2] OP现在补充说+符号应该是可选的。在这种情况下,正则表达式在+之后需要一个问号,所以上面的示例现在看起来像这样:

^[+]?[0-9]{10,13}$

对于有效手机您需要考虑7位到13位数,因为某些国家/地区有7位数的手机号码。此外,我们无法检查手机号码必须以9或8或任何东西开始..

对于手机号码,我使用了此功能

private boolean isValidMobile(String phone2) 
{
    boolean check;
    if(phone2.length() < 6 || phone2.length() > 13)
    {
        check = false;
        txtPhone.setError("Not Valid Number");
    }
    else
    {
        check = true;
    }
    return check;
}

答案 3 :(得分:1)

使用this进行手机号码验证,效果就像魅力一样。它涵盖了手机验证以及开发人员希望尝试使用电话号码的更多信息。

答案 4 :(得分:0)

To validate India's mobile number.

Your edit text input 
edt_mobile.text.toString().trim()

Number validation method

    fun isValidMobile(phone: String): Boolean {
                return phone.matches(Constants.REGEX_MOBILE.toRegex()) && phone.trim().length == 10
      }

Regression expression 



 const val REGEX_MOBILE = "^[6-9]{1}[0-9]{9}\$"