3
\\    $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 的问题,但没有得到什么时候会出现这个错误。我该如何解决。我看到的许多问题中的一些问题是 -

  1. 警告:preg_match() [function.preg-match]:未知修饰符
  2. preg_match() 语句中的未知修饰符
  3. 警告:preg_match() [function.preg-match]:未知修饰符
  4. 未知修饰符“l”错误
  5. 未知修饰符 'g' PHP 正则表达式错误
  6. ... 中的未知修饰符“/”?它是什么?
  7. preg_match() 未知修饰符 '[' 帮助
  8. 警告:preg_match() [function.preg-match]:未知修饰符“v”
  9. PHP Preg_match 匹配精确词
  10. 在正则表达式中使用 preg_match() 表达式时的未知修饰符“v”
  11. preg_match(); - 未知修饰符“+”
  12. preg_match 错误未知修饰符'{'
  13. 使用带有 REGEX 表达式的 preg_match() 时的未知修饰符 '('
4

5 回答 5

5

如果名字或姓氏包含 a /,您的正则表达式将类似于:

/john/doe$/

To preg_match,这看起来像正则表达式 is /john/,尾随doe$/是修饰符。这些当然是无效的修饰符。您需要/使用preg_quote.

于 2012-08-03T10:46:19.203 回答
4

$NameFirst$NameLast可能包含斜杠 /。

你应该替换这个

$SignatureMatch =  '/' . strtolower( $NameFirst . ' ' . $NameLast ) . '$/';

这样 :

$SignatureMatch =  '/' . preg_quote(strtolower( $NameFirst . ' ' . $NameLast ), '/') . '$/';
于 2012-08-03T10:44:58.253 回答
3

您输入的字符串之一($NameFirst$NameLast)包含一个/. 使用不同的分隔符或在字符串中对其进行转义。

此外,如果您只是检查子字符串是否在不同的字符串中,请不要使用preg_match, ,stripos()因为它会快得多。

if (stripos($DigitalSignature ,"$NameFirst $NameLast")) { /* It exists! */ }
于 2012-08-03T10:44:51.927 回答
0

在这种情况下,您不应该使用正则表达式,因为您没有使用任何模式匹配。如果您只想在另一个字符串中查找一个字符串,请使用strposorstrrpos函数: 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 );
于 2012-12-22T05:50:10.420 回答
0

如果您使用的是T-Regx,则会自动为您添加分隔符:

$SignatureMatch =  strtolower($NameFirst . ' ' . $NameLast) . '$';

if (pattern($SignatureMatch, 'i')->matches($DigitalSignature))
{
    $boolIsValid = true;
}
于 2018-10-09T13:35:28.080 回答