Регулярное выражение, соответствующее положительной или отрицательной сумме или проценту в долларах - PullRequest
1 голос
/ 14 июля 2020

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

Затем цифры с необязательной запятой в качестве разделителя групп di git после di git в тысячах / сотнях тысяч / миллионах ... За которыми следует необязательная десятичная точка и одна или две цифры И, наконец, возможный%, но только если ввод не содержит $, а число от -100,00 до + 100,00

Так что сопоставить ввод, например: 12, -60, 25,50 долларов США, - 1,5 доллара США, + 25 000 долларов США, 5,5%, -100%, + 100%, 0,01%

И вернуть false с вводом, например: Text, + 10% долларов США, - 5.001

Я оценивал их по отдельности:

function percentValue(input) {
    regex = /^[+-]?\$?(?=.)(\d*|\d{1,3}(,\d{3})*)?(\.\d{1,2})?$/;
    return regex.test(input);
}

function dollarValue(input) {
    regex = /^[+-]? *100(\.0{0,2})? *%?$|^[+-]? *\d{1,2}(\.\d{1,2})? *%?$/;
    return regex.test(input);
}

Результаты

percentValue('5.5%');  // True
percentValue('-100%'); // True
percentValue('+.01%'); // True
percentValue('0.001'); // False
percentValue('101%');  // False
percentValue('$100%'); // False

dollarValue('+$12');    // True
dollarValue('-$60.5');  // True
dollarValue('$25,000'); // True
dollarValue('-$5.001'); // False
dollarValue('1,00.25'); // False
dollarValue('$text');   // False

Я безуспешно пытался объединить их в один. Следует ли использовать другой прогноз для процента?

1 Ответ

0 голосов
/ 19 июля 2020

var test = [
    '12',
    '-60',
    '$25.50',
    '-$1.5',
    '+$25,000',
    '5.5%',
    '-100%',
    '+100%',
    '0.01%',
    'Text',
    '+$10%',
    '-5.001',
];
console.log(test.map(function (a) {
  return a+' :'+/^[+-]?(?:\$?\d{1,3}(?:,\d{3})*(?:\.\d\d?)?|(?:100|\d\d?)(?:\.\d\d?)?%)$/.test(a);
}));

Демонстрация и объяснение

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