EditText - 身份證格式判斷及輸入限制處理
這次要對EditText身份證的格式驗證
要自行撰寫TextWatcher做偵測
撰寫如下
private TextWatcher mEditIdTextWatcher= new TextWatcher() {
private CharSequence temp;
@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after) {
temp = s;
}
@Override
public void onTextChanged(CharSequence s, int start, int before,int count) {
}
@Override
public void afterTextChanged(Editable s) {
//判斷是否為身分證格式
if(!isIdNoFormat(temp.toString())) {
//TODO:身份證錯誤處理
}
}
/**
* 判斷是否為身份證字號格式 (
*/
public boolean isIdNoFormat(String word) {
boolean check = true;
for(int i = 0 ; i < word.length();i++) {
String s = word.substring(i,i+1);
if(i==0) {
if(!isEnglish(s)) {
check = false;
break;
}
} else {
if(!isDigit(s)) {
check = false;
break;
}
}
}
return check;
}
/**
* 英文判斷
*/
public boolean isEnglish(String word){
boolean check = true;
for(int i=0;i<word.length();i++) {
int c = (int)word.charAt(i);
if(c>=65 && c<=90 || c>=97 && c<=122) {
//是英文
} else {
check = false;
}
}
return check;
}
/**
* 數字判斷
*/
public boolean isDigit(String word) {
boolean check = true;
for(int i=0;i<word.length();i++) {
int c = (int)word.charAt(i);
if(c>=48 && c<=57 ) {
//是數字
} else {
check = false;
}
}
return check;
}
};
EditText則設定,則就完成,我這個身份證判斷,只用來判斷第一個字為英文,其它為數字。EditText有設定最大長度為10。再來就不做其它判斷,需要則自行撰寫
edit_input.addTextChangedListener(mEditInputTextWatcher);