Задать вопрос
nepster-web
@nepster-web

Как проверить строку по маске?

К сожалению я практически не знаю регулярных выражений и поэтому возник следующий вопрос:

К примеру есть строка: XXX-XXX-XXX
Необходимо проверить строку и понять подходит ли она под данную маску.

Можно написать регулярку, которая бы проверяла это дело, но дело в том, что маски могут быть динамические и должна быть возможность, чтобы их задавали менеджеры так сказать.

Например менеджер задает вот такую маску X-XX-XX-XXXXX и под эту маску подходит любая комбинация строки типа:
7-Ds-re-SD434.

Можно конечно как-то наговнокодить, пытаться сгенерировать регулярку, потом ее подставлять, но интересует красивый и быстрый способ. Может кто-то сталкивался, поделитесь опытом.
  • Вопрос задан
  • 3921 просмотр
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
27cm
@27cm
TODO: Написать статус
Можно конечно как-то наговнокодить, пытаться сгенерировать регулярку, потом ее подставлять, но интересует красивый и быстрый способ

А можно не наговнокодить, а красиво и быстро сгенерировать регулярку из маски.
ideone.com/YY4Yhh
$mask = 'X-XX-XX-XXXXX';
$test = '7-Ds-re-SD434';

$pattern = preg_replace_callback('/X+/', function ($m) { 
    return '[^-]{' . strlen($m[0]) . '}'; 
}, preg_quote($mask));

if (preg_match("/^{$pattern}$/", $test)) {
	echo "Строка '$test' подходит под маску '$mask'"; 
}


Но есть вариант и проще:
ideone.com/GiwMAY
$mask = 'X-XX-XX-XXXXX';
$test = '7-Ds-re-SD434';

if (preg_replace('/[^-]/', 'X', $test) == $mask) {
    echo "Строка '$test' подходит под маску '$mask'"; 
}
Ответ написан
Комментировать
Albibek
@Albibek
Вопросы есть? А если найду?
Можно вообще обойтись без регулярок. У вас есть чёткий разделитель - тире. Сделайте split по "-" для маски и собственно строки. Дальше достаточно сравнить длины массивов и поэлементно длины получившихся строк.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы