Поймать пробелы в коде Javascript - PullRequest
0 голосов
/ 11 февраля 2012

В следующей программе, когда вводятся только белые пробелы, она показывает ex2 исключение value less than 5, вместо отображения ex4 исключение This is not a valid number, я не мог понять логику этого.

<html>
<head>
    <title></title>
    <script type="text/javascript">
        function promptCheck() {

            var val=prompt("Enter a Number between 5 and 10","");

            try {
             if(val=="") {
                 throw "ex1";
             }

             else if(val<5) {
                 throw "ex2";
             }

             else if(val>10) {
                 throw "ex3";
             }

             else if(isNaN(val)) {
                 throw "ex4";
             }
            }

            catch(err) {
                if(err=="ex1") {
                    alert("You have not entered any value");
                }
                 if(err=="ex2") {
                    alert("Value less than 5");
                }
                 if(err=="ex3") {
                    alert("Value greater than 10");
                }
                 if(err=="ex4") {
                    alert("This is not a valid number");
                }
            }

        }
    </script>
</head>

<body>
    <input type="button" value="Bring Mouse on Me!" onmouseover="promptCheck()" />
</body>
</html>

Ответы [ 2 ]

2 голосов
/ 11 февраля 2012

Это происходит потому, что строка с только пробелами обрабатывается как пустая строка и преобразуется в 0.

Итак

"    "*1 // => 0

Что нужно сделать, это предварительно проанализировать значение:

var value = parseInt(val, 10); // would be NaN in case of empty string
2 голосов
/ 11 февраля 2012

В числовом контексте пробел конвертируется в ноль.И ноль явно ниже, чем 5.

alert('  ' * 1);    // Shows 0

Чтобы решить эту проблему, вы можете использовать parseFloat, который будет печатать NaN для пробелов.Другой вариант - использовать RegExps, чтобы гарантировать, что входные данные состоят из целых чисел:

var val = prompt("Enter a Number between 5 and 10", "");
val = /\d+/.exec(val); // Numbers if valid, null otherwise

// OR, instead of the previous line:
if (/\D/.test(val) { // If the input contains a non-digit character, error.
    throw "ex4";
} else ...

Для преобразования строки в число см. это сравнение методов преобразования чисел .Вы можете видеть, что происходит для данного ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...