Я все еще пытаюсь справиться с шаблонами регулярных выражений и сразу после небольшой проверки, если кто-то не возражает!Regex Preg_match для лицензионного ключа 25 буквенно-цифровых и 4 дефиса
У меня есть строка, которая должна содержать либо:
- 10 цифр (цифры и буквы) лицензионный ключ, например: 1234567890 ИЛИ
- A 25 цифр (цифры и буквы) лицензионный ключ, для пример:
ABCD1EFGH2IJKL3MNOP4QRST5
ИЛИ - Ряд 29 цифр лицензии (25 числа и буквы, разделенных на 5 групп дефисом), например:
ABCD1-EFGH2-IJKL3-MNOP4-QRST51
I может соответствовать первым двум штрафам, используя функции ctype_alnum и strlen. Тем не менее, для последнего я думаю, что мне нужно будет использовать регулярное выражение и preg_match
.
я был перейти в regex101.com и придумал следующее:
preg_match('^([A-Za-z0-9]{5})+-+([A-Za-z0-9]{5})+-+([A-Za-z0-9]{5})+-([A-Za-z0-9]{5})+-+([A-Za-z0-9]{5})', $str);
который, кажется, соответствует тому, что я ищу. Я хочу, чтобы строка содержала точное соответствие для строки, начинающейся с номера лицензии, и содержала ничего, кроме смешанных букв и цифр верхнего и нижнего регистра в любом порядке и дефисов между каждой группой из 5 символов (так что в общей сложности 29 персонажи - я не хочу никаких дальнейших матчей). Нет пробелов, других символов и ничего еще до или после 29-значной клавиши.
Будет ли работа выше, без каких-либо других комбинаций? Остановит ли он проверку на 29 символов? Я не уверен, есть ли более простой способ выразить это в regex?
Спасибо за ваше время!
Вы забыли якоря и регулярные выражения разделителей. Кроме того, я считаю, что '+' неуместны, удалите их. Используйте '' ~^[A-Za-z0-9] {5} - [A-Za-z0-9] {5} - [A-Za-z0-9] {5} - [A-Za-z0 -9] {5} - [A-Za-z0-9] {5} $ ~ ''. Или даже '' ~^[A-Za-z0-9] {5} (?: - [A-Za-z0-9] {5}) {4} $ ~ ''. Попробуйте [здесь] (https://regex101.com/r/jC3xV2/3). –
@Wiktor Stribiżew благодарит за быстрый ответ, его очень оценили. Можете ли вы объяснить, что означает сокращенная версия? Я пытаюсь лучше понять регулярное выражение. Значит, мне не нужно постоянно спрашивать о том, что вас беспокоят все! Кроме того, если вы представите это как ответ, я смогу принять его, если он будет работать (когда мой лимит на принятие ответов пройдет!) – BottyZ
* если он работает *, это то, почему я не размещаю это. Это работает? Укороченная версия такая же, как и более длинные, она просто использует ограничивающий квантификатор '{4}', чтобы не повторять шаблон 4 раза. Обратите внимание, что '$' соответствует концу строки. –