Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проверка строки на правильность (https://javascript.ru/forum/misc/51913-proverka-stroki-na-pravilnost.html)

sashok 25.11.2014 09:32

Проверка строки на правильность
 
Добрый день! Возникла необходимость написать скрипт проверки правильности расставления скобок в строке!
Сам скрипт написал
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 в браузере. И не знаю как сделать инпут и появление правильного и неправильного результата

jsnb 25.11.2014 09:50

<!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>

рони 25.11.2014 09:55

sashok,
http://javascript.ru/forum/css-html/...teki-v-js.html

kostyanet 25.11.2014 15:22

В который раз обращаю внимание что в JS есть встроенный парсер и его надо только натравить на выражение до того, как применить выражение.

var str='7+(9-5';
try{
eval(str);
}
catch(e){
  alert(e);
}

/*
Exception: missing ) in parenthetical
@Scratchpad/1:11:1
*/

ruslan_mart 26.11.2014 07:06

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

kostyanet 26.11.2014 07:09

Ну да, если это не js-арифметика, то eval побреется. Но в этом случае неизбежен вопрос - кто получает эту строку и что с ней делает? Тот кто ее получает и понимает, чтобы понять - должен разобрать на токены. В процессе этого разбора, то есть парсинга, все до номера символа где нет скобки и определяется.


Часовой пояс GMT +3, время: 05:15.