Попытка принудительно переписать определенные текстовые поля

Sqij спросил: 12 мая 2018 в 03:37 в: javascript

Я наткнулся на этот конкретный код, и, пока я нахожу его полностью функциональным, я пытаюсь выполнить несколько его частей, чтобы сделать его более удобным для пользователя. При этом я пытаюсь заставить некоторые значения в каждом текстовом поле.

Первый текстовый файл должен быть текстовым полем только для двоичного кода, только 0 и 1 разрешено. Второй и четвертый текстовые поля должны быть восьмеричными и шестнадцатеричными. Мой вопрос: как мне принудительно перезаписывать эти текстовые поля? Я пытаюсь сказать, что я ищу свойство или событие, которое стирает мой ввод, если оно не соответствует мне в текстовом поле.

Если я ввожу букву или число в двоичном формате текстовое поле, оно должно быть удалено. Если я набираю число больше 7 или букву в восьмеричном текстовом поле, удаляем.Hexadecimal = нет букв, кроме AF. А для десятичных знаков нет. Я знаю, как исключать эти значения, используя и если и другие номенклатуры, но я действительно теряю, когда дело доходит до его выполнения для каждого текстового поля.

Это код:

    window.onload = id;function id(id) {
  return document.getElementById(id);
}
function Convert(s, n)
 {
  if(parseInt(id(s).value, n)) 
  {
    if("bin" != s) { id("bin").value = parseInt(id(s).value, n).toString(2) }
    if("oct" != s) { id("oct").value = parseInt(id(s).value, n).toString(8) }
    if("dec" != s) { id("dec").value = parseInt(id(s).value, n).toString(10) }
    if("hex" != s) { id("hex").value = parseInt(id(s).value, n).toString(16) }
  } else 
  {
    if("bin" != s) { id("bin").value = "" }
    if("oct" != s) { id("oct").value = "" }
    if("dec" != s) { id("dec").value = "" }
    if("hex" != s) { id("hex").value = "" }  }
 }

1 ответ

Есть решение
Ivan ответил: 12 мая 2018 в 03:47

Используйте событие onkeyup, чтобы прослушать изменения, сделанные пользователем в окне ввода.

Вы можете проверить с выражением REGEX, что строка в вашем поле ввода содержит только s и 0 s. Если нет, то удалите последнюю введенную букву:

const check = e => {
  const value = e.target.value
  const isBinary = /^[0,1]+$/.test(value)
  
  if(!isBinary) {
    
    e.target.value = value.substring(0, value.length - 1);
  
  }

}
<input onkeyup="check(event)">

Где 1 вернет /^[0,1]+$/.test(value), если true содержит только value и / или 0, иначе он вернет 1 .

Sqij ответил: 12 мая 2018 в 03:59
Спасибо, это должно творить чудеса. Я действительно не знал об этом выражении REGEX. Очень признателен.