Проверка строки на правильность
Добрый день! Возникла необходимость написать скрипт проверки правильности расставления скобок в строке!
Сам скрипт написал
var str = 'Так не нужно (()) писать скобки ';
function bracket(){
var count = 0;
for (var i = 0; i <= str.length; i++) {
if (str[i] == "(") {
count++;
} else if(str[i] == ")") {
count--;
}
}
if(count == 0) {
console.log('Скобки расставлены правильно');
} else {
console.log('Скобки не могут быть так расставлены');
}
}
bracket();
Но хотелось бы сделать его более приемлемым для глаз. Вот в таком виде: https://www.dropbox.com/s/zqau6dvs25...acket.jpg?dl=0 но я еще не особо знаком с DOM в браузере. И не знаю как сделать инпут и появление правильного и неправильного результата |
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<input type="text" id="inputStr"><br>
<span id="result"></span>
<script>
document.getElementById('inputStr').oninput = function() {
var str = this.value;
var resultSpan = document.getElementById('result');
if (bracket(str)) {
resultSpan.innerHTML = 'Ok';
resultSpan.style.color = 'green';
} else {
resultSpan.innerHTML = 'Error';
resultSpan.style.color = 'red';
}
}
function bracket(str) {
var count = 0;
for (var i = 0; i <= str.length; i++) {
if (str[i] == "(") {
count++;
} else if (str[i] == ")") {
count--;
}
}
if (count == 0) {
return true;
} else {
return false;
}
}
</script>
</body>
</html>
|
|
В который раз обращаю внимание что в JS есть встроенный парсер и его надо только натравить на выражение до того, как применить выражение.
var str='7+(9-5';
try{
eval(str);
}
catch(e){
alert(e);
}
/*
Exception: missing ) in parenthetical
@Scratchpad/1:11:1
*/
|
function bracked(str) {
var a = str.match(/\(/gm),
b = str.match(/\)/gm);
return a && b ? a.length == b.length : a == b;
}
alert( bracked('Тестовая строка без скобок') ); //true
alert( bracked('Текстовая строка с (правильными скобками)') ); //true
alert( bracked('Текстовая строка (с (неправильными скобками)') ); //false
|
Ну да, если это не js-арифметика, то eval побреется. Но в этом случае неизбежен вопрос - кто получает эту строку и что с ней делает? Тот кто ее получает и понимает, чтобы понять - должен разобрать на токены. В процессе этого разбора, то есть парсинга, все до номера символа где нет скобки и определяется.
|
| Часовой пояс GMT +3, время: 04:51. |