\\ $DigitalSignature have full name value passed $SignatureMatch = '/' . strtolower( $NameFirst . ' ' . $NameLast ) . '$/'; if( true == preg_match( $SignatureMatch, strtolower( $DigitalSignature ) ) ) { $boolIsValid = true; }
У меня есть этот код для точного совпадения имени и фамилии с цифровой подписью. Но это дает сообщение об ошибке в журнале ошибок (live).
preg_match(): Unknown modifier 'b'
Я не могу воспроизвести эту ошибку. Как я могу получить эту ошибку во-первых. И как разрешить эту ошибку для точного соответствия.
Я видел много вопросов о SO, но не получаю, когда вы получите эту ошибку. И как мне это разрешить. Некоторые из многих вопросов, которые я видел,
Если имя или фамилия содержит /
, ваше регулярное выражение будет выглядеть примерно так:
/john/doe$/
Для preg_match
это выглядит как regex is /john/
, при этом конечные doe$/
являются модификаторами. Это, конечно, недействительные модификаторы. Вам нужно избегать разделителей регулярных выражений ( /
) внутри самого регулярного выражения, используя preg_quote
.
Одна из строк, которые вы вводите ( $NameFirst
или $NameLast
), содержит /
. Используйте другой разделитель или избегайте его в строках.
Кроме того, если вы проверяете, находится ли подстрока внутри другой строки, не используйте preg_match
, используйте stripos()
поскольку она будет намного быстрее.
if (stripos($DigitalSignature ,"$NameFirst $NameLast")) { /* It exists! */ }
$NameFirst
или $NameLast
может содержать косую черту /.
Вы должны заменить это
$SignatureMatch = '/' . strtolower( $NameFirst . ' ' . $NameLast ) . '$/';
Этим :
$SignatureMatch = '/' . preg_quote(strtolower( $NameFirst . ' ' . $NameLast ), '/') . '$/';
Вы не должны использовать регулярное выражение в этом случае, потому что вы не используете сопоставление шаблонов. Если вы просто хотите найти одну строку внутри другой, используйте функции strpos
или strrpos
: http://php.net/manual/en/function.strpos.php
Если важно, чтобы имя было найдено в конце подписи, тогда это еще проще: возьмите подстроку из $ signature, которая состоит в том, что многие символы длиннее от конца.
$fullname = strtolower( "$NameFirst $NameLast" ); $len = strlen($fullname); $possible_name = substr( $fullname, -$len, $len ); $boolIsValid = ( $possible_name == $fullname );