проверка ввода пользователя javascript - PullRequest
0 голосов
/ 07 июля 2011

Я создаю программу, в которой мне нужно проверить ввод пользователя.

Пользователь должен иметь возможность писать числа с плавающей запятой и некоторые буквы, такие как 'k' для тысячи или 'm' для миллиона.Допустимы: цифры и только одна буква из списка (g, k, m, n, u) и только одна буква '.'для десятичных чисел.Если пользователь ставит другой знак, две буквы из списка, две точки, следуют за буквой за другим знаком - в текстовом поле ничего не отображается.

То, что я до сих пор делал, вообще не работает.Я даже не могу создать список с разрешенными знаками.Как я могу решить это?Я видел почти каждую страницу в Интернете о регулярных выражениях.

function signFilter(e)
{
    var keynum;
    var keychar;
    var numcheck;

    if(window.event) // IE
    {
        keynum = e.keyCode;
    }
    else if(e.which) // Netscape/Firefox/Opera
    {
        keynum = e.which;
    }
    keychar = String.fromCharCode(keynum);
    numcheck = /[0-9GMkmpu.]/;
    return numcheck.test(keychar);
}

http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_onkeydown Вот пример кода для ввода.Ничто из того, что я пробую, не дает разумного результата.(конечно, я убрал «!» из возврата).

Ответы [ 4 ]

0 голосов
/ 07 июля 2011

Это работает

http://jsfiddle.net/mplungjan/KvJQx/

window.onload=function() {
  document.getElementById("t1").onkeypress=function(e) {
    var keyNum =  (window.event)?window.event.keyCode:e.which;
    var keyChar = String.fromCharCode(keyNum);
    return /[0-9GMkmpu\.]/.test(keyChar);
  }
}
0 голосов
/ 07 июля 2011

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

Например, строка 123.123.321.m - все допустимые символы, но последняя строка недопустима.

Как правило, вам нужно добавить проверку, которая проверяет введенную последнюю строку.

Такое регулярное выражение может помочь вам в проверке окончательного ввода строки.

numcheck = /^[0-9]*\.?[0-9]+[gkmnu]?$/

Это регулярное выражение говорит

  1. опционально соответствует 0-9
  2. далее, необязательно, соответствует точке
  3. следующий, сопоставить хотя бы одно число
  4. конец строки может заканчиваться одним символом из набора
0 голосов
/ 07 июля 2011
/^[0-9]*[\.]*[0-9]*[Mkmpu]*$/

Этот довольно гибкий и обрабатывает несколько случаев, таких как ".57m" "57" "57m" "57.m" "57.57m".

0 голосов
/ 07 июля 2011

Ваше регулярное выражение просто проверяет наличие одного из символов в [ и ].То, что вы пытаетесь сделать, это проверять наличие любого другого символа в строке.

Я предлагаю вам иметь знак ^, например: [^0-9GMkmpu.], поэтому вы сможете обнаружить любой неправильный символв строке.

С помощью регулярного выражения вы написали что-то вроде: aaaaaaaaakhhhhhhhhh вернет да.

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