проблема
Я пытаюсь получить регулярное выражение, которое соответствует [0-9]:[0-9]
или [0-9].[0-9]
или [0-9]
или [0-9]:
или [0-9].
Что я пробовал
/^\d?(\d+)?((\.|\:|\d)$|(\.|\:|\d)(\d+)?\d$)/
Это регулярное выражение, удовлетворяющее моему условию.
Мой оптимизированный код
\d+[\.:]*\d*
Но это принимает 2:2:
На самом деле это не должно быть. Не в состоянии решить это.
Ваш \d+[\.:]*\d*
не привязан и соответствует частичным подстрокам, соответствующим шаблону. Кроме того, он соответствует 11.....:::
как строки, как [.:]*
Соответствует 0+ .
или :
символы.
Вы можете использовать
^\d+(?:[.:]\d*)?$
Смотрите демо регулярных выражений.
подробности
^
- начало строки\d+
- 1+ цифры(?:
- начало сопоставления группы без захвата [.:]
- один .
или :
\d*
- 0+ цифры)?
- 1 или 0 раз$
- конец строки. Как насчет \d([:.]\d?)?
? Это должно обрабатывать все случаи, которые вы упомянули.
Или \d+([:.]\d*?)?
если вы хотите принять более одной цифры в каждом номере.
Чтобы соответствовать, только если точно, просто добавьте ^
в начало и $
в конец регулярного выражения. Пример:
const regex = /^\d+([:.]\d*?)?$/
console.log(regex.test('2'))
console.log(regex.test('2:'))
console.log(regex.test('2.'))
console.log(regex.test('2:3'))
console.log(regex.test('2.3'))
console.log(regex.test('12:23'))
console.log(regex.test('23.34'))
console.log(regex.test('2:3:4'))
console.log(regex.test('2.3.4'))
2: 2: не совпадает полностью, только подстрока 2: 2
Чтобы избежать этого, просто используйте якоря ^ и $, как вы использовали в исходном шаблоне. Ниже приведен рабочий пример регулярного выражения с использованием вашего оптимизированного регулярного выражения с добавленными якорями - /^\d+[.:]?\d*$/
, а здесь ссылка на него https://regexr.com/47msc.
^\d+(?:[.:]\d*)?$
, См. Демонстрацию .