Разрешить знак минус только в качестве первого ввода - PullRequest
0 голосов
/ 04 апреля 2019

Я использую регулярное выражение для своих числовых входов, чтобы разрешить только цифры и запятую, но теперь я хотел добавить шанс отрицательных чисел, что можно сделать следующим образом text.replace(/[^0-9,-]/g, '');.

Однако я бы хотел, чтобы знак минус использовался только в качестве самого первого ввода, чтобы избежать таких вещей, как 1-3,7.

1 Ответ

1 голос
/ 04 апреля 2019

Я рекомендую просто использовать строку test() здесь с соответствующим шаблоном регулярного выражения:

^-?\d{1,3}(?:,\d{3})*(?:\.\d+)?$

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

Примеры:

var pass1 = 123.456;
var pass2 = -999;
var pass3 = '123,456,789.888';
var fail = '1-3,7';
console.log(/^-?\d{1,3}(?:,\d{3})*(?:\.\d+)?$/.test(pass1));
console.log(/^-?\d{1,3}(?:,\d{3})*(?:\.\d+)?$/.test(pass2));
console.log(/^-?\d{1,3}(?:,\d{3})*(?:\.\d+)?$/.test(pass3));
console.log(/^-?\d{1,3}(?:,\d{3})*(?:\.\d+)?$/.test(fail));

Краткое объяснение того, что делает паттерн:

^                from the start of the string
    -?           match an optional negative sign
    \d{1,3}      match one to three digits
    (?:,\d{3})*  followed by a thousands term (, + 3 digits) zero or more times
    (?:\.\d+)?   followed by an optional decimal component
$                end of the string
...