Source Code
English translation
Это будет короткая статья. Посмотрим как форматировать EditText при помощи регулярных выражений.
Класс для форматирования наследуем от Input Filter:
Трюк состоит в том, что если введенный текст не соответствует паттерну, то он может соответствовать ему частично.
Если это так, то мы позволяем ввод текста.
И, как пример, форматирование номера телефона:
В итоге:
English translation
Это будет короткая статья. Посмотрим как форматировать EditText при помощи регулярных выражений.
Класс для форматирования наследуем от Input Filter:
public class PartialRegexInputFilter implements InputFilter {
private Pattern mPattern;
public PartialRegexInputFilter(String pattern){
mPattern = Pattern.compile(pattern);
}
@Override
public CharSequence filter(CharSequence source,
int sourceStart, int sourceEnd,
Spanned destination, int destinationStart,
int destinationEnd)
{
String textToCheck = destination.subSequence(0, destinationStart).
toString() + source.subSequence(sourceStart, sourceEnd) +
destination.subSequence(
destinationEnd, destination.length()).toString();
Matcher matcher = mPattern.matcher(textToCheck);
// Entered text does not match the pattern
if(!matcher.matches()){
// It does not match partially too
if(!matcher.hitEnd()){
return "";
}
}
return null;
}
}
Трюк состоит в том, что если введенный текст не соответствует паттерну, то он может соответствовать ему частично.
Если это так, то мы позволяем ввод текста.
И, как пример, форматирование номера телефона:
final String regex = "\\(\\d{3}\\)\\d{3}\\-\\d{2}\\-\\d{2}";
txt.setFilters(
new InputFilter[] {
new PartialRegexInputFilter(regex)
}
);
txt.addTextChangedListener(
new TextWatcher(){
@Override
public void afterTextChanged(Editable s) {
String value = s.toString();
if(value.matches(regex))
txt.setTextColor(Color.BLACK);
else
txt.setTextColor(Color.RED);
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {}
}
);
В итоге:

Форматирование введенного номер а в отдельном классе?
ОтветитьУдалить