Когда есть 7 цифр и две запятые, а курсор в конце, range.location
будет 9. Поэтому используйте:
return range.location <= 9
Это позволит 8 цифр и две запятые.
Но даже тогда вашего чека недостаточно.Пользователь может переместить курсор к началу номера и ввести еще несколько цифр.Так что просто проверить местоположение курсора недостаточно.Вы хотите проверить длину полученной строки.
Ваш код также не прилагает усилий для предотвращения ввода нечислового текста.Пользователь может копировать и вставлять, пользователь может использовать внешнюю клавиатуру.А на iPad клавиатура .numberPad
все еще показывает нормальную полноценную клавиатуру.Никогда не полагайтесь на назначенную клавиатуру.
Сводка - обновите shouldChangeCharactersIn
, чтобы убедиться, что вводятся только цифры, и посмотрите, какой будет конечная длина строки, расположение курсора не имеет значения.