Тип шаблона ввода HTML для NN: NN - PullRequest
1 голос
/ 26 октября 2019

Я пытаюсь разобрать шаблон регулярного выражения для любого положительного числа, NN: NN . Пользователь должен ввести продолжительность упражнения ЧЧ: ММ , где ММ <60. </p>

Например: 22:22, 99:59, 01:00, 66:00. но не 00:00

До сих пор я пробовал этот шаблон = "([01]? [0-9] | 2 [0-3]): [0-9] [0-9]"но это только в течение 24 часов.

pattern="([01]?[0-9]|2[0-3]):[0-9][0-9]"

Я ожидал 55:55, но это не позволяет мне подняться выше цифры 2 по первой цифре ('2' _: __)

Ответы [ 3 ]

1 голос
/ 26 октября 2019

Использование

/^(?=.*[1-9]+)\d{2}\:\d{2}$/;

Пояснение

(?=.*[1-9]+) Ожидание не менее 1 ненулевой цифры

\d{2}\ Для сопоставления с любыми двумя цифрами в части часа

\:[0-5][0-9] Чтобы сопоставить минуты с максимумом 59 после :

Вот JavaScript-реализация RegEx

let re = /^(?=.*[1-9]+)\d{2}\:[0-5][0-9]$/;
console.log("00:00 => ",re.test("00:00"));
console.log("01:00 => ",re.test("01:00"));
console.log("00:10 => ",re.test("00:10"));
console.log("11:00 => ",re.test("11:00"));
console.log("33:44 => ",re.test("33:44"));
console.log("66:60 => ",re.test("66:60"));
1 голос
/ 26 октября 2019

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

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

/^\d{2}:\d{2}$/

Чтобы ограничить вторую группу цифр допустимыми минутами (например, не более 59), будет работать следующее регулярное выражение:

/^\d{2}:[0-5][0-9]$/

Второе - отрицательное утверждение. Вы хотите убедиться, что это не 00:00. В зависимости от используемой вами структуры, обычно есть простой способ добавить эту вторую проверку. Если вы не используете платформу, вы должны прослушать изменения для ввода и проверить их при изменении.

1 голос
/ 26 октября 2019

Использование класса символов [01]?[0-9] также соответствует 00, а также [0-9][0-9]

Один из вариантов - использовать отрицательный прогноз, чтобы проверить, не справа ли 00:00, и использоватьграницы слова \b

\b(?!00:00)[0-9]{2}:[0-5][0-9]\b
  • \b граница слова
  • (?!00:00) Утверждение, что справа не 00: 00
  • [0-9]{2}:[0-5][0-9] соответствует 2 цифрам : число от 00 до 59
  • \b Граница слова

Regex demo

const regex = /\b(?!00:00)[0-9]{2}:[0-5][0-9]\b/;
[
  "22:22",
  "99:59",
  "99:60",
  "01:00",
  "66:00",
  "00:00"
].forEach(s => console.log(s + ": " + regex.test(s)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...