Regex - проверка списка чисел, разделенных запятыми, длиной от 1 до 3 цифр - PullRequest
1 голос
/ 09 января 2020

Я пытаюсь проверить список номеров через запятую, где число может быть от 1 до 3 цифр, может начинаться с 0, но не может быть 0 (0, 00 или 000). Я использую ниже, но когда я проверяю '44, 222,555 ', я получаю недействительным:

^([1-9]|[0-9][1-9]|[0-9][0-9][1-9](?:,(?:[1-9]|[0-9][1-9]|[0-9][0-9][1-9]))*)$

Я думаю, 90 здесь тоже будет недействительным, но должно быть действительным

Ответы [ 2 ]

1 голос
/ 09 января 2020

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

/^(?!0+\b)[0-9]{1,3}(?:,(?!0+\b)[0-9]{1,3})*$/gm

RegEx Demo

(?!0+\b) - это отрицательный прогноз, который провалит матч, если мы иметь один или несколько нулей перед границей слова перед текущей позицией.

0 голосов
/ 17 января 2020

В случае, когда

ПРИМЕЧАНИЕ : В зависимости от размера строки увеличение скорости будет достигнуто, если не использовать глобальный флаг.

  • Допускается от одного до трех номеров для набора
  • Допускается от одного до нескольких наборов
  • 0, 00, 000 Начинающиеся с нуля комбинации не допускаются
  • 01, 010, 001, 100 комбинаций на основе нуля допускаются
  • Если более одного набора чисел, то одна запятая разделения между наборами
  • Не допускается заканчиваться запятой

let regex = new RegExp('^((?!0+\\b)[0-9]{1,3}\,?\\b)+$');

// NOTE: If using literal notation /regex/.test() then "\" is not escaped.
// i.e. '^((?!0+\\b)[0-9]{1,3}\,?\\b)+$' becomes /^((?!0+\b)[0-9]{1,3}\,?\b)+$/
// /^((?!0+\b)[0-9]{1,3}\,?\b)+$/.test(string);

console.log('Passes question test: 44,222,555 ', regex.test('44,222,555'));
console.log('Passes question test: 90 ', regex.test('90'));
console.log('Can contain multiple sets of one to three numbers: ', regex.test('1,22,333'));
console.log('Cannot have more than three numbers in a set 1234', !regex.test('1234'));
console.log('Can have one number in a set ', regex.test('1'));

console.log('Cannot have 0 alone as a set: ', !regex.test('0'));
console.log('Cannot have 00 alone as a set: ', !regex.test('00'));
console.log('Cannot have 000 alone as a set: ', !regex.test('000'));

console.log('Cannot end in a comma ', !regex.test('123,'));

console.log('Cannot contain multiple commas next to each other ', !regex.test('123,,694'));
console.log('Allowed zero combinations are 00#, #00, 0#0, 00#, ##0, 0## ', regex.test('001,100,010,001,110,011'));
console.log('Cannot be just a comma ', !regex.test(','));
console.log('Cannot be a blank string ', !regex.test(''));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...