'' $DigitalSignature have full name value passed
$SignatureMatch = '/' . strtolower( $NameFirst . ' ' . $NameLast ) . '$/';
if( true == preg_match( $SignatureMatch, strtolower( $DigitalSignature ) ) )
{
$boolIsValid = true;
}
我有这个代码来精确匹配名字和姓氏与数字签名匹配。但这会在生产(实时(的错误日志中报告错误。
preg_match(): Unknown modifier 'b'
我无法重现此错误。我怎么能首先得到这个错误。以及如何解决此错误以进行精确匹配。
我已经看到了很多关于SO的问题,但不明白什么时候会出现此错误。我该如何解决这个问题。在我看到的众多问题中,有一些问题是——
- 警告:preg_match(( [function.preg-match]:未知修饰符
- preg_match(( 语句中的未知修饰符
- 警告:preg_match(( [function.preg-match]:未知修饰符
- 未知修饰符"l"错误
- 未知修饰符 'g' PHP 正则表达式错误
- ...中的未知修饰符"/"? 这是什么?
- preg_match(( 未知修饰符 '[' 帮助
- 警告:preg_match(( [function.preg-match]:未知修饰符"v">
- PHP Preg_match匹配确切的单词
- 在正则表达式中使用 preg_match(( 表达式时的未知修饰符"v">
- preg_match((; - 未知修饰符"+">
- preg_match错误未知修饰符"{">
- 将 preg_match(( 与 REGEX 表达式一起使用时出现未知修饰符 '('
如果名字或姓氏包含/
,您的正则表达式将如下所示:
/john/doe$/
preg_match
来说,这看起来像正则表达式是/john/
的,尾随doe$/
是修饰符。这些当然是无效的修饰符。您需要使用 preg_quote
转义正则表达式本身内部的正则表达式分隔符 ( /
(。
$NameFirst
或$NameLast
可能包含斜杠/。
你应该替换这个
$SignatureMatch = '/' . strtolower( $NameFirst . ' ' . $NameLast ) . '$/';
通过这个:
$SignatureMatch = '/' . preg_quote(strtolower( $NameFirst . ' ' . $NameLast ), '/') . '$/';
您输入的字符串之一($NameFirst
或$NameLast
(包含/
。使用不同的分隔符或在字符串中对其进行转义。
此外,如果您只检查子字符串是否在不同的字符串中,请不要使用 preg_match
,使用 stripos()
因为它会快得多。
if (stripos($DigitalSignature ,"$NameFirst $NameLast")) { /* It exists! */ }
在这种情况下,不应使用正则表达式,因为您没有使用任何模式匹配。 如果您只想在另一个字符串中找到一个字符串,请使用 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 );
如果您使用的是 T-Regx,则会自动为您添加分隔符:
$SignatureMatch = strtolower($NameFirst . ' ' . $NameLast) . '$';
if (pattern($SignatureMatch, 'i')->matches($DigitalSignature))
{
$boolIsValid = true;
}