\\ $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匹配]:未知的修饰
- 在的preg_match()语句未知的修饰
- 警告:的preg_match()[function.preg匹配]:未知的修饰
- 未知的修饰词“L”错误
- 未知的修饰词“G” PHP正则表达式错误
- 在未知的修饰词“/” ...? 它是什么?
- 的preg_match()未知的修饰词'['帮助
- 警告:的preg_match()[function.preg匹配]:未知的修饰'V'
- PHP的preg_match精确匹配词
- 未知的修饰“V”使用正则表达式的preg_match()表达时
- 的preg_match(); -未知的修饰词“+”
- 的preg_match错误未知的修饰词“{”
- 未知的修饰“(”使用的preg_match()当与正则表达式表达
如果第一个名字或姓氏包含/
,你的正则表达式看起来像:
/john/doe$/
要preg_match
,这看起来像正则表达式为/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
如果它是重要的是名称,在签名的结尾部分,那么它会更简单:取从$签名子是从末端长的字符。
$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;
}