我即将创建电话号码格式的验证。格式为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();
}
答案 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}\$"