Почему мой оператор IF, который сравнивает два символа, возвращает false, когда оба символа одинаковы? [закрыто]Javascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Почему мой оператор IF, который сравнивает два символа, возвращает false, когда оба символа одинаковы? [закрыто]

Сообщение Anonymous »

Первоначально я написал какой -то код, чтобы проверить функцию eval () , но теперь я превращаю ее в очень базовый калькулятор. Поскольку он использует функцию eval () для вычисления выражений, введенных во входе , мне пришлось создать систему, которая не позволяет пользователям вкладывать код JavaScript в вход и выполнять его (я думаю, что это то, что такое XSS). Для этого я сделал вложенную для цикл, который принимает ввод и использует charat () для сравнения каждого символа во входе с каждым символом в строке DislowedChars . Если два символа одинаковы, он должен установить допустимый на false и вырваться из всего цикла (родительский цикл помечен Chartest ). Если допустимо верно, он затем использует eval () для оценки выражения, введенного на входе, в противном случае это не так.
Проблема в том, что по какой -то причине код не работает. Например, если я введу строку 2 ** 63 , она выводит 9 223,372 036 854 776 000 . Однако, если я введу 1A , вы увидите, что одна из вещей, которые выходы консоли являются, не является , одобренным! , когда они оба одинаковы. Я не использую персонажей из другого алфавита (например, греческий или кирилли, так как вы сможете легко проверить для себя. Вот все мой код: < /p>

Код: Выделить всё

const expr = document.querySelector("#expr");
const result = document.querySelector("#result");

function calculate() {
const disallowedChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`~!@#$%^&_=[]\\{}|;':\",./?";
var input = expr.value;
var valid = true;
if (input != "") {
charTest: for (var k = 0; k < input.length; k++) {
console.log("The current character being checked is " + input.charAt(k) + " at position " + k);
for (var i = 0; i < disallowedChars.length; i++) {
console.log("Comparing " + input.charAt(k) + " at position " + k + " to " + disallowedChars.charAt(i) + " at position " + i);
if (input.charAt(k) == disallowedChars.charAt[i]) {
console.error("Denied");
alert("For safety purposes, the character \"" + input.charAt(k) + "\" is not allowed");
valid = false;
break charTest;
} else {
console.log(input.charAt(k) + " is not " + disallowedChars.charAt(i));
console.log("Approved!");
}
}
}
if (valid) {
var resultText = new Number(eval(input)).toLocaleString();
result.value = resultText;
} else {
alert("Failed to calculate expression")
}
} else {
alert("Enter a valid expression");
}
}

function resetHeights() {
expr.style.height = result.style.height = "12.5vh"
}< /code>



eval() test








Calculate
Reset heights
Reset
Allowed symbols:
[list]
[list]+
— addition[/list] [/list]


< /code>
< /div>
< /div>
< /p>
Я пытался выяснить это в общей сложности около часа, но я просто не мог найти, где я мог испортить. Кто -нибудь знает, в чем может быть проблема и как я мог бы его исправить?>

Подробнее здесь: https://stackoverflow.com/questions/797 ... n-both-cha
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»