ОБНОВЛЕНО
Прежде всего вам необходимо решить, что вы хотите сделать в случае неправильного ввода данных пользователем. Например, пользователь уже ввел «AB» и теперь пытается ввести «C». Вы хотите отказаться от "C"? Вы хотите, чтобы поле ввода стало "B C"? Допустим, вы хотите отказаться от "C".
Проверьте, является ли source
экземпляром Spanned
. Если это так, то вы не можете просто отправить обратно пустую строку, если ввод неверен, или он сотрет текстовое поле (это происходит с вами сейчас). Вам необходимо извлечь правильную часть из source
и отправить ее обратно. Поскольку мы решили просто отбросить все буквы после первых 2, вы можете попытаться сопоставить source
с ^([a-zA-Z]{0,2})(?:[^\d]*)(\d{0,7})
. Затем отправьте обратно результат, составленный из соответствующей группы 1 + группа 2, то есть первые 2 буквы + первые 7 цифр.
Если source
не является экземпляром Spanned
, вы можете проверить, соответствует ли dest + source ^[a-zA-Z]{0,2}\d{0,7}$
. Если да, отправьте обратно null
, в противном случае отбросьте ввод - верните пустую строку.