如果判断一个手机号码是否是手机号码呢?如何判断邮箱的格式是否正确呢?这个时候我们可以使用正则表达式来判断,关于正则表达式的语法详见:
正则表达式主要使用到Pattern与Matcher类:
Pattern: 一个Pattern是一个正则表达式经编译后的表现模式。
Matcher: 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。
这里写了个测试判断手机号码、验证码、邮箱、帐号和密码的例子:
/**
* 主界面
*
* @author yuzhentao
*/
public class MainActivity extends Activity implements View.OnClickListener{
private Context context;
private EditText et01, et02, et03, et04, et05;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
@Override
public void onClick(View v) {
int viewId = v.getId();
switch (viewId) {
case R.id.button_01_activity_main:
if (!isPhoneRegex(et01.getText().toString())) {
Toast.makeText(context, "手机号码格式错误", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "手机号码格式正确", Toast.LENGTH_SHORT).show();
}
break;
case R.id.button_02_activity_main:
if (!isCaptchaRegex(et02.getText().toString())) {
Toast.makeText(context, "验证码格式错误", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "验证码格式正确", Toast.LENGTH_SHORT).show();
}
break;
case R.id.button_03_activity_main:
if (!isEmailRegex(et03.getText().toString())) {
Toast.makeText(context, "邮箱格式错误", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "邮箱格式正确", Toast.LENGTH_SHORT).show();
}
break;
case R.id.button_04_activity_main:
if (!isAccountRegex(et04.getText().toString())) {
Toast.makeText(context, "帐号格式错误", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "帐号格式正确", Toast.LENGTH_SHORT).show();
}
break;
case R.id.button_05_activity_main:
if (!isPasswordRegex(et05.getText().toString())) {
Toast.makeText(context, "密码格式错误", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "密码格式正确", Toast.LENGTH_SHORT).show();
}
break;
}
}
private void initView() {
context = this;
et01 = (EditText) findViewById(R.id.edittext_01_activity_main);
et02 = (EditText) findViewById(R.id.edittext_02_activity_main);
et03 = (EditText) findViewById(R.id.edittext_03_activity_main);
et04 = (EditText) findViewById(R.id.edittext_04_activity_main);
et05 = (EditText) findViewById(R.id.edittext_05_activity_main);
findViewById(R.id.button_01_activity_main).setOnClickListener(this);
findViewById(R.id.button_02_activity_main).setOnClickListener(this);
findViewById(R.id.button_03_activity_main).setOnClickListener(this);
findViewById(R.id.button_04_activity_main).setOnClickListener(this);
findViewById(R.id.button_05_activity_main).setOnClickListener(this);
}
/**
* 判断是否是合法手机号码(手机号码段详见:http://baike.baidu.com/view/781667.htm#2)
*
* @param phone:手机号码
* @return boolean
*/
private boolean isPhoneRegex(String phone) {
String phonePattern = "^(((13\\d{1})|(14[57])|(15([0-3]|[5-9]))|(17[6-8])|(18\\d{1}))\\d{8}|170[0,5,9]\\d{7})$";
// Pattern p = Pattern.compile(phonePattern);
// Matcher m = p.matcher(phone);
// return m.matches();
// 或者
return Pattern.matches(phonePattern, phone);
}
/**
* 判断是否是合法验证码(6位数字)
*
* @param captcha:验证码
* @return boolean
*/
private boolean isCaptchaRegex(String captcha) {
String captchaPattern = "^\\d{6}$";
return Pattern.matches(captchaPattern, captcha);
}
/**
* 判断是否是合法邮箱
*
* @param email:邮箱
* @return boolean
*/
private boolean isEmailRegex(String email) {
String emailPattern = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
return Pattern.matches(emailPattern, email);
}
/**
* 判断是否是合法帐号(允许6~18字节,允许字母数字下划线)
*
* @param account:帐号
* @return boolean
*/
private boolean isAccountRegex(String account) {
String accountPattern = "^\\w{6,18}$";
return Pattern.matches(accountPattern, account);
}
/**
* 判断是否是合法密码(以字母开头,允许6~18字节,允许字母数字下划线)
*
* @param password:密码
* @return boolean
*/
private boolean isPasswordRegex(String password) {
String passwordPattern = "^[a-zA-Z]\\w{5,17}$";
return Pattern.matches(passwordPattern, password);
}
}
具体判断代码里已经写得很清楚了,当然也可以把这些判断写到一个工具类当中,大家随意。
这里说一下单独使用Pattern和Matcher时怎么用,如下:
Pattern p = Pattern.compile(phonePattern);
Matcher m = p.matcher(phone);
return m.matches();
希望对大家有所帮助。
效果图: