как заменить последний специальный символ, когда я нажимаю новый в javascript

#javascript #html #jquery

Вопрос:

Пример:

если основное входное значение, например, «1 23 «, то мне нужно заменить последний специальный символ новым, предположим, я нажму новые специальные символы, такие как минус, символ умножения и деления и т. Д.

мой ожидаемый результат:

  • когда я нажимаю на символ минус > «1 23- «
  • когда я нажимаю на символ умножения > «1 23* «
 <body>

<input type="text" id="Main">

<input class="ip" type="button" value="1" onclick="Cal(this)">
<input class="ip" type="button" value="2" onclick="Cal(this)">
<input class="ip" type="button" value="3" onclick="Cal(this)">

<input class="ip" type="button" value=" " onclick="Cal(this)">
<input class="ip" type="button" value="-" onclick="Cal(this)">
<input class="ip" type="button" value="*" onclick="Cal(this)">

</body>   
 
 <script>

 function Cal(btn)
 {
 document.getElementById("Main").value =btn.value;
 }

</script>
 

Комментарии:

1. jsfiddle.net/dpxarmts (кроме того, вы пробовали что-нибудь перед публикацией здесь? проводил какие-нибудь исследования? гуглил, как получить последний символ строки? и т.д.)

Ответ №1:

Это то, чего ты хочешь. Сначала я проверяю последний символ входной строки с помощью регулярного выражения, обнаруживающего специальные символы, и если внутри ввода есть специальный символ и если значение нажатой вами кнопки также является специальным символом, я удаляю последний символ из строки. А затем в конце значение нажатой вами кнопки добавляется в конец строки.

 function cal(btn)
{
  let format = /[ `!@#$%^amp;*()_ -=[]{};':"\|,.<>/?~]/;
  let input = document.getElementById("Main").value
  if(format.test(input.charAt(input.length - 1)) amp;amp; format.test(btn.value)){
     input = input.slice(0, -1)
  }
  
  input  = btn.value;
  document.getElementById("Main").value = input
} 
 <body>

<input type="text" id="Main">

<input class="ip" type="button" value="1" onclick="cal(this)">
<input class="ip" type="button" value="2" onclick="cal(this)">
<input class="ip" type="button" value="3" onclick="cal(this)">

<input class="ip" type="button" value=" " onclick="cal(this)">
<input class="ip" type="button" value="-" onclick="cal(this)">
<input class="ip" type="button" value="*" onclick="cal(this)">

</body> 

Вы можете редактировать регулярное выражение в соответствии с вашими точными потребностями.

Ответ №2:

1) Если last value это не number так, то есть это а symbol и current value также not a number есть . Короче говоря, если last value является symbol и current value является также символом. В этом случае вы должны удалить last value и append current value

 const display = document.getElementById("Main");
const appendValue = val => display.value  = val;
const isNumber = n => !isNaN(parseInt(n));

function Cal(btn) {
  const lastValue = display.value.slice(-1);
  const currentValue = btn.value;

  if (!isNumber(lastValue) amp;amp; !isNumber(currentValue))
    display.value = display.value.slice(0, display.value.length - 1)   currentValue;
  else appendValue(currentValue);
} 
 <input type="text" id="Main">

<input class="ip" type="button" value="1" onclick="Cal(this)">
<input class="ip" type="button" value="2" onclick="Cal(this)">
<input class="ip" type="button" value="3" onclick="Cal(this)">

<input class="ip" type="button" value=" " onclick="Cal(this)">
<input class="ip" type="button" value="-" onclick="Cal(this)">
<input class="ip" type="button" value="*" onclick="Cal(this)"> 

2) Вам нужно добавить значение только в том случае, если оно одно из следующих:

  • Если во входных данных нет значения(пустой ввод), а текущее значение равно a number .
  • Если last value есть number .
  • Если last value не является number и current value является number
 const display = document.getElementById("Main");
const appendValue = val => display.value  = val;
const isNumber = n => !isNaN(parseInt(n));

function Cal(btn) {
  const lastValue = display.value.slice(-1);
  const currentValue = btn.value;

  if ((!lastValue amp;amp; isNumber(currentValue)) ||
    (isNumber(lastValue)) ||
    (!isNumber(lastValue) amp;amp; isNumber(currentValue))) appendValue(currentValue);
  else display.value = display.value.slice(0, display.value.length - 1)   currentValue;
} 
 <input type="text" id="Main">

<input class="ip" type="button" value="1" onclick="Cal(this)">
<input class="ip" type="button" value="2" onclick="Cal(this)">
<input class="ip" type="button" value="3" onclick="Cal(this)">

<input class="ip" type="button" value=" " onclick="Cal(this)">
<input class="ip" type="button" value="-" onclick="Cal(this)">
<input class="ip" type="button" value="*" onclick="Cal(this)">