2012-08-03 113 views
3
\\ $DigitalSignature have full name value passed 
$SignatureMatch = '/' . strtolower($NameFirst . ' ' . $NameLast) . '$/'; 
if(true == preg_match($SignatureMatch, strtolower($DigitalSignature))) 
{ 
    $boolIsValid = true; 
} 

我有这个代码完全匹配的名字和姓氏与数字签名匹配。但是这给错误报告我错误日志生产(生活)。preg_match():什么时候发生未知修饰符错误?

preg_match(): Unknown modifier 'b' 

我无法重现此错误。我怎样才能首先得到这个错误。以及如何解决此错误以进行精确匹配。

我看过很多关于SO的问题,但没有得到什么时候会得到这个错误。我该如何解决这个问题。有些问题出许多我锯是 -

  1. Warning: preg_match() [function.preg-match]: Unknown modifier
  2. Unknown modifier in preg_match() statement
  3. Warning: preg_match() [function.preg-match]: Unknown modifier
  4. Unknown modifier 'l' error
  5. Unknown modifier 'g' PHP regex error
  6. Unknown modifier '/' in ...? what is it?
  7. preg_match() Unknown modifier '[' help
  8. Warning: preg_match() [function.preg-match]: Unknown modifier 'v'
  9. PHP Preg_match match exact word
  10. Unknown modifier 'v' when using preg_match() expression in regex
  11. preg_match(); - Unknown modifier '+'
  12. preg_match error Unknown modifier '{'
  13. Unknown modifier '(' when using preg_match() with a REGEX expression
+1

我们需要看到生成的模式,而不是创建它的变量。 – Utkanos 2012-08-03 10:44:30

回答

4

,你的正则表达式看起来像:

/john/doe$/ 

preg_match,这看起来像正则表达式是/john/,尾随doe$/是修饰符。那些当然是无效的修饰符。您需要使用preg_quote来逃避正则表达式本身内部的正则表达式分隔符(/)。

3

一个你输入($NameFirst$NameLast)的字符串包含/。使用不同的分隔符或将其转义到字符串中。

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

if (stripos($DigitalSignature ,"$NameFirst $NameLast")) { /* It exists! */ } 
+0

我在通过检查之前从$ DigitalSignature删除斜杠。 – 2012-08-03 10:46:56

+0

@SomnathMuluk:我不是指'$ DigitalSignature'。 – 2012-08-03 10:48:01

+0

谢谢。我终于能够重现这个错误。我需要完全匹配。是否有可能与stripos? – 2012-08-03 10:55:08

3

$NameFirst$NameLast可以含有斜线/。

此时应更换此

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

通过这样的:如果第一个名字或姓氏包含/

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

在这种情况下,您不应该使用正则表达式,因为您没有使用任何模式匹配。如果你只是想找到另一个里面一个字符串,然后使用strposstrrpos功能:http://php.net/manual/en/function.strpos.php

如果它是重要的是名称,在签名的结尾部分,那么它会更简单:取从$一个子签名是从最后很多字符。

$fullname = strtolower("$NameFirst $NameLast"); 
$len = strlen($fullname); 
$possible_name = substr($fullname, -$len, $len); 
$boolIsValid = ($possible_name == $fullname); 
相关问题