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

名または姓に が含まれている/場合、正規表現は次のようになります。

/john/doe$/

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)の 1 つに/. 別の区切り文字を使用するか、文字列内でエスケープしてください。

また、部分文字列が別の文字列内にあるかどうかを確認するだけの場合はpreg_match、使用しないでください。使用stripos()するとはるかに高速になります。

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

この場合、パターンマッチングを使用していないため、正規表現を使用しないでください。別の文字列の中から1つの文字列を検索するだけの場合は、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 );
于 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 に答える