Я ищу выражение, соответствующее ^[0-9]{2}:[0-9]{2} - [0-9]{2}:[0-9]{2}$, и любую строку, соответствующую любому началу этого выражения.
Так что в принципе...
/^[0-9]{2}:[0-9]{2} - [0-9]{2}:[0-9]{2}$/ ||
/^[0-9]{2}:[0-9]{2} - [0-9]{2}:[0-9]{1}$/ ||
/^[0-9]{2}:[0-9]{2} - [0-9]{2}:$/ ||
/^[0-9]{2}:[0-9]{2} - [0-9]{2}$/ ||
/^[0-9]{2}:[0-9]{2} - [0-9]{1}$/ ||
/^[0-9]{2}:[0-9]{2} - $/ ||
/^[0-9]{2}:[0-9]{2} -$/ ||
/^[0-9]{2}:[0-9]{2} $/ ||
/^[0-9]{2}:[0-9]{2}$/ ||
/^[0-9]{2}:[0-9]{1}$/ ||
/^[0-9]{2}:$/ ||
/^[0-9]{2}$/ ||
/^[0-9]{1}$/
...Именно это я и использую сейчас. Но мне хотелось бы сделать это короче.
/^[0-9]{0,2}:?[0-9]{0,2} ?-? ?[0-9]{0,2}:?[0-9]{0,2}$/ у меня не работает, так как это тоже соответствует, например, "22: - 23:00".
Возможно?
Идея, которую я еще не использовал: вместо создания длинного сложного шаблона, почему бы и нет... 1.) создать переменный формат с допустимой строкой 00:00 - 00:00 2.) использовать простой шаблон, например ^\d{2} :\d{2} - \d{2}:\d{2}$ 3.) заполните str для проверки формата и шаблона проверки. Посмотрите эту демонстрацию JS на tio.run
Приведите примеры входных данных, которые должны совпадать, и примеры, которые не должны совпадать.





Я ожидаю, что вы ищете следующее, которое я написал в расширенном режиме или режиме со свободным интервалом (/x), чтобы было легче писать и читать.
^\d
(?:\d
(?::
(?:\d
(?:\d
(?:\s
(?:-
(?:\s
(?:\d
(?:\d
(?::
(?:\d{1,2}
)?
)?
)?
)?
)?
)?
)?
)?
)?
)?
)?$
В расширенном режиме все пробелы удаляются на этапе предварительной обработки, за исключением случаев, когда пробелы экранированы (\s, \ ), находятся внутри класса символов ([ ]) или так определены токеном Unicode ([[:space:]], \p{Space}).
Вопросительный знак в конце каждого
(?:... ...)?
делает группу без захвата необязательной.
Мы пока не знаем, какую среду вы используете, но следующую идею можно легко адаптировать к большинству языков. Для демонстрации я использую фрагмент Javascript.
Вместо написания длинного шаблона, охватывающего каждый случай, вы можете использовать простой шаблон и заполнить тестовую строку предопределенным форматом, соответствующим шаблону.
Посмотрите эту ванильную демонстрацию JS на tio.run или попробуйте следующий фрагмент.
$("#checkStr").on("keyup", function()
{
// any valid string
const format = '00:00 - 00:00';
// simple pattern
const p = /^\d\d:\d\d - \d\d:\d\d$/;
// fill up with format and test
let valid = p.test(this.value+format.substring(this.value.length));
// demo showcase
if (!valid) {
this.style.backgroundColor = '#eea39c';
this.value = this.value.substring(0, this.value.length-1);
} setTimeout(() => { this.style.backgroundColor = '#88dd85'; }, 700);
});<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js">
</script><input id = "checkStr" style = "font-size: 20px" type = "text" value = "">
Вы также можете указать, в какой среде вы запускаете регулярное выражение, поскольку некоторые из них могут предоставить простой способ получить частичные совпадения.