android 同步监听输入框,以及电话号码正则表达式!

下面这段程序主要为了实现以下三个功能:

一、同步监听文本输入框的变化,默认继承以下三个方法,分别监听文本改变前、中、后;
二、同时用正则表达式判断输入的电话号码是否合法;
三、最后在activity展示一秒后,跳出软键盘;

package com.my; import java.util.Timer; import java.util.TimerTask; import java.util.regex.Matcher; import java.util.regex.Pattern; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; public class LoginCheckActivity extends Activity { private Button checkNextButton = null; private Button checkCancelButton = null; private EditText phoneEditText = null; private TextWatcher phoneTextWatcher; private String phoneNumber = null; private InputMethodManager imm; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.login_check); initView(); } private void initView() { // TODO Auto-generated method stub checkNextButton = (Button) findViewById(R.id.button_check_next); checkCancelButton = (Button) findViewById(R.id.button_check_cancel); phoneEditText = (EditText) findViewById(R.id.login_check_edittext); checkNextButton.setEnabled(false);//设置按钮为不可按 /** * 监听输入的手机号码是否正确 */ phoneTextWatcher = new TextWatcher() { @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub phoneNumber = phoneEditText.getText().toString(); if (isPhoneNumberValid(phoneNumber) == true) { checkNextButton.setEnabled(true); Log.e("@@@", "ture"); } else { checkNextButton.setEnabled(false); Log.e("@@@", "false"); } } }; phoneEditText.addTextChangedListener(phoneTextWatcher); } /** * 检查字符串是否为电话号码的方法,并返回true or false的判断值 */ public static boolean isPhoneNumberValid(String phoneNumber) { boolean isValid = false; /** 可接受的电话格式有: * ^//(? : 可以使用 "(" 作为开头 * (//d{3}): 紧接着三个数字 * //)? : 可以使用")"接续 * [- ]? : 在上述格式后可以使用具选择性的 "-". * (//d{3}) : 再紧接着三个数字 * [- ]? : 可以使用具选择性的 "-" 接续. * (//d{5})$: 以五个数字结束. * 可以比较下列数字格式: * (123)456-7890, 123-456-7890, 1234567890, (123)-456-7890 */ String expression = "^//(?(//d{3})//)?[- ]?(//d{3})[- ]?(//d{5})$"; /** 可接受的电话格式有: * ^//(? : 可以使用 "(" 作为开头 * (//d{3}): 紧接着三个数字 * //)? : 可以使用")"接续 * [- ]? : 在上述格式后可以使用具选择性的 "-". * (//d{4}) : 再紧接着四个数字 * [- ]? : 可以使用具选择性的 "-" 接续. * (//d{4})$: 以四个数字结束. * 可以比较下列数字格式: * (02)3456-7890, 02-3456-7890, 0234567890, (02)-3456-7890 */ String expression2 = "^//(?(//d{3})//)?[- ]?(//d{4})[- ]?(//d{4})$"; CharSequence inputStr = phoneNumber; /*创建Pattern*/ Pattern pattern = Pattern.compile(expression); /*将Pattern 以参数传入Matcher作Regular expression*/ Matcher matcher = pattern.matcher(inputStr); /*创建Pattern2*/ Pattern pattern2 = Pattern.compile(expression2); /*将Pattern2 以参数传入Matcher2作Regular expression*/ Matcher matcher2 = pattern2.matcher(inputStr); if (matcher.matches())//|| matcher2.matches()) { isValid = true; } return isValid; } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(phoneEditText, 0); } }, 1000); } }

还有一种更简洁地判断手机号码的方法,如下:

/** * 判别手机是否为正确手机号码; *号码段分配如下: *移动:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188 *联通:130、131、132、152、155、156、185、186 *电信:133、153、180、189、(1349卫通) */ public static boolean isMobileNum(String mobiles) { Pattern p = Pattern .compile("^((13[0-9])|(15[^4,//D])|(18[0,5-9]))//d{8}$"); Matcher m = p.matcher(mobiles); return m.matches();

ok!

你可能感兴趣的:(android 同步监听输入框,以及电话号码正则表达式!)