Javascript RegExp, чтобы разрешить только определенные символы в определенных местах - PullRequest
1 голос
/ 15 декабря 2010

Я хочу использовать регулярное выражение, чтобы «заставить» пользователя правильно отформатировать временную метку.

В данный момент я могу ограничить ввод, чтобы пользователь мог вводить только цифры, тире или двоеточие, используяследующее:

function allownumbers(e) {
        var key = window.event ? e.keyCode : e.which;
        var keychar = String.fromCharCode(key);
        var reg = new RegExp("[-0-9: ]")
        if (key == 8) {
            keychar = String.fromCharCode(key);
        }
        if (key == 13) {
            key = 8;
            keychar = String.fromCharCode(key);
        }
        return reg.test(keychar);
    }

Тем не менее, пользователь все еще может вводить недействительные данные, например, 0000 :: - 12354 подтвердит.

Могу ли я использовать регулярное выражение, чтобы заставить пользователя ввести### - ## - ## ##: ##: ## (например, 2010-12-15 10:57:01)?

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

Приветствия,

Бен

Ответы [ 4 ]

1 голос
/ 15 декабря 2010

Используйте плагин проверки jQuery .

Поскольку у вас есть пользовательский формат даты, я укажу вам это сообщение SO .

Если вы хотите форсировать определенный паттерн во время ввода, посмотрите не дальше, чем плагин маскированного ввода .

0 голосов
/ 03 июля 2013

Почему бы просто не использовать небольшой блок проверки? после того, как они ввели строку ...

var date = new Date(dtStr);
if (isNaN(date) && dtStr != "MM/DD/YYYY") {

    return alert('Please enter a valid date');
}
else {
    if (date.getFullYear() > 2100 || date.getFullYear() < 1900) {
        return alert("Please enter a valid year");
    }
}
0 голосов
/ 15 декабря 2010

Вы можете сделать это легко - просто используйте {}, чтобы ограничить количество записей. В качестве довольно грубого примера regex: [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} будет делать то, что вы хотите, просто протестируйте его для всего содержимого текстового поля - например, reg.match (e.srcElement.value).

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

0 голосов
/ 15 декабря 2010

Ваш шаблон регулярного выражения может быть

var re = /\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d/;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...