Некоторые части моего регулярного выражения не работают


2

Я думаю, что вы значительно усложняете регулярное выражение. Этого должно быть много:

^-?d+(,dd)?$
  • ^ Начало строки,
  • -? Дополнительный знак минус,
  • d+ Вслед за кучей цифр,
  • (,dd)?За ним следуют запятая и 2 цифры, которые являются 3 необязательными.
    (альтернатива: (,d{2})?)
  • $ Конец линии.

var regex = /^-?d+(,dd)?$/;

console.log(regex.test('0,25'));
console.log(regex.test('-175,33'));
console.log(regex.test('15555555555555,99'));

console.log(regex.test('9,999'));
console.log(regex.test('15.03'));
console.log(regex.test('77,77,77'));

Там у вас есть регулярное выражение для проверки входного значения.
Теперь этот блок кода можно заменить следующим:

$("input[name*='TB_mytbx']").on('keypress', function (event) {
    var regex = /^-?d+(,dd)?$/;
    var value = $(this).val();  // Use the field's value, instead of the pressed key.

    if (!regex.test(value)) {
        event.preventDefault();
        return false;
    }
});

0 принят

Для тех из вас, кто хочет знать, я решил это, используя этот код

        $("input[name*='mythingy']").on('keypress', function (event) {
        var theEvent = event || window.event;
        var key = theEvent.keyCode || theEvent.which;
        key = String.fromCharCode(key);
        var value = this.value;
        var value = value.replace(value.substring(theEvent.currentTarget.selectionStart, theEvent.currentTarget.selectionEnd), "");
        value = [value.slice(0, theEvent.currentTarget.selectionStart), key, value.slice(theEvent.currentTarget.selectionStart)].join('');
        var regex = /^[-+]?([d ]+(,d{0,2})?)?$/;
        if (!regex.test(value)) {
            theEvent.returnValue = false;
            if (theEvent.preventDefault) theEvent.preventDefault();
        }
    });
JavaScript, JQuery, регулярное выражение,

javascript,jquery,regex,

1

Ответов: 2


2

Я думаю, что вы значительно усложняете регулярное выражение. Этого должно быть много:

^-?d+(,dd)?$
  • ^ Начало строки,
  • -? Дополнительный знак минус,
  • d+ Вслед за кучей цифр,
  • (,dd)?За ним следуют запятая и 2 цифры, которые являются 3 необязательными.
    (альтернатива: (,d{2})?)
  • $ Конец линии.

var regex = /^-?d+(,dd)?$/;

console.log(regex.test('0,25'));
console.log(regex.test('-175,33'));
console.log(regex.test('15555555555555,99'));

console.log(regex.test('9,999'));
console.log(regex.test('15.03'));
console.log(regex.test('77,77,77'));

Там у вас есть регулярное выражение для проверки входного значения.
Теперь этот блок кода можно заменить следующим:

$("input[name*='TB_mytbx']").on('keypress', function (event) {
    var regex = /^-?d+(,dd)?$/;
    var value = $(this).val();  // Use the field's value, instead of the pressed key.

    if (!regex.test(value)) {
        event.preventDefault();
        return false;
    }
});

0 принят

Для тех из вас, кто хочет знать, я решил это, используя этот код

        $("input[name*='mythingy']").on('keypress', function (event) {
        var theEvent = event || window.event;
        var key = theEvent.keyCode || theEvent.which;
        key = String.fromCharCode(key);
        var value = this.value;
        var value = value.replace(value.substring(theEvent.currentTarget.selectionStart, theEvent.currentTarget.selectionEnd), "");
        value = [value.slice(0, theEvent.currentTarget.selectionStart), key, value.slice(theEvent.currentTarget.selectionStart)].join('');
        var regex = /^[-+]?([d ]+(,d{0,2})?)?$/;
        if (!regex.test(value)) {
            theEvent.returnValue = false;
            if (theEvent.preventDefault) theEvent.preventDefault();
        }
    });
JavaScript, JQuery, регулярное выражение,
Похожие вопросы