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) {} } );
В итоге:
Форматирование введенного номер а в отдельном классе?
ОтветитьУдалить