Обнаружение присутствия символов или строк из допустимых

Ну, я застрял, я не могу найти правильную форму для RegEx, чтобы предоставить PHP preg_match.

У меня есть две строки. Сказать "mdo" а также "o", но они могут быть действительно случайными.

У меня есть словарь разрешенных символов и строк.

Например, допустимые символы "a-gm0-9"и допустимые строки "do" а также "si",

ЦЕЛЬ

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

Так что дело "mdo" не будет соответствовать, потому что m допускается так же, как строка do, Не то же самое для o вместо этого, который имеет o это не разрешенный символ и который не содержит всю разрешенную строку do,

Моя борющаяся причина

Это нормально отрицать [^a-gm0-9] а также (?!do|si), но я не могу добиться их размещения внутри одного регулярного выражения, чтобы применить следующий код PHP:

<?php
$inputStr = 'mdo';
$rex = '/?????/i';      // the question subject
// if disallowed chars/strings are found...
if( preg_match($regex, $inputStr) == 1 )
return false;     // the $inputStr is not valid
return true;
?>

Потому что два каскадных preg_matches сломают логику и не будут работать.

Как смешать проверку символов и групп проверки в «И» в одном регулярном выражении? Их позиции не имеют значения.

1

Решение

Вы можете использовать этот шаблон:

return (bool) preg_match('~^(?:do|si|[a-gm0-9])*+\C~i', $inputStr);

Идея состоит в том, чтобы сопоставить все допустимые символы и подстроки с самого начала в повторяющейся группе с собственнический квантификатор и проверить, если один байт \C остается. Поскольку квантификатор является жадным и притяжательным, нельзя допустить использование одного байта после, если он найден.

Обратите внимание, что в большинстве случаев проще отрицать preg_match функция, пример:

return (bool) !preg_match('~^(?:do|si|[a-gm0-9])*$~iD', $inputStr);

(или с + квантификатор, если вы не хотите разрешать пустые строки)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]