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();

希望对大家有所帮助。

效果图:


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

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值