Как реализовать автоматическую коррекцию формата ввода в калькуляторе на JS?

Написал калькулятор на джеквери. Как сделать так, чтоб если идет первый ноль и следующий символ - не точка и не +-/* идет след число то ноль заменяется на это число jsfiddle.net/stnhy346/46 Спасибо за ранее всем кто помогает таким как я
  • Вопрос задан
  • 205 просмотров
Пригласить эксперта
Ответы на вопрос 2
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Тут логичнее было бы иметь состояние ввод/результат. т.к. если вы нажмете равно, то вроде бы при вводе символов поле должно стираться, но у вас числа продолжают вводиться. Сделайте переменную isInput, которая по умолчанию будет false (это когда ноль), и при вводе проверяйте, если она false, то стираем поле, делаем isInput = true и добавляем цифры в поле. После нажатия на равно делаем isInput = false, чтобы при вводе цифр поле стиралось.
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
Вот такое регулярное выражение заменит ноль в начале строки на пустую строку, если за нулём НЕ идёт один из . + - * /

var re = /^0(?![\.\+\-\/\*])/;

['03','0','0.','0+'].map(s => s.replace(re,'')) /* 3,,0.,0+ */


Просто единственный ноль также удалится – ведь за ним не идёт один из спец-символов. Поэтому применяйте эту регулярку только когда длина строки больше 1.
Старый ответ

Неудобно организовано, т.к. содержание табло может поменяться из нескольких мест..
С минимальными правками отн. нынешнего варианта, можно попробовать так:
везде, где изменяется содержание табло, получать введённые числа (бить строку по одному из + - * /; каждую из частей бить по точке, и каждое из получившихся целых прогонять через parseInt() – это отбросит нули в начале. Потом собирать: склеить точкой, склеить знаком операции.

Но лучше как-то иначе организовать всю логику. Например, в процессе ввода не текстовую строку собирать, а заполнять массив числами и операторами. [5.1, "*", 4.2, "-", 3.7] И перед склейкой в одну строку для отображения в табло, проводить необходимые коррекции чисел.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы