Android学习之使用正则表达式Pattern与Matcher来判断字符串格式

如果判断一个手机号码是否是手机号码呢?如何判断邮箱的格式是否正确呢?这个时候我们可以使用正则表达式来判断,关于正则表达式的语法详见:

http://baike.baidu.com/link?url=slMgbxDanfC6wBLXN4iuOiptalJnHKuLW0KCgZB_XWvCL1ZaH6NKTDusrZ9vPkvhz9WeUCMRbWKryFrBMh5oga

正则表达式主要使用到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();

希望对大家有所帮助。

效果图:

Android学习之使用正则表达式Pattern与Matcher来判断字符串格式_第1张图片

Demo地址:http://download.csdn.net/detail/qq_23940659/9475245

你可能感兴趣的:(android,正则表达式,Pattern,Matcher)