1

/^\S+@\S+\.\S+$/iこれは私の正規表現ですが、それでも警告がスローされます

警告: preg_match(): デリミタは、英数字またはバックスラッシュであってはなりません ...

これは、最後に i を追加することでエスケープされると思います。私のコードはこれです

       $emailregex = '/^\S+@\S+\.\S+$/i';
   $isbnregex = '/[0-9]{12}[0-9Xx]/i';
   preg_match ($plaintext,$emailregex,$emailaddress);
   var_dump ($emailaddress);

誰でもこれに光を当てることができますか?

4

3 に答える 3

2

引数の順序は次のとおりです。

preg_match ($emailregex,$plaintext,$emailaddress);

つまり、$emailregex が最初の引数です

于 2013-01-05T23:35:27.443 に答える
1

パラメータの順序を間違えました。ドキュメントから:

int preg_match ( string $pattern , string $subject [, array &$matches
                                                     [, int $flags = 0
                                                     [, int $offset = 0 ]]] )

したがって、コードは次のようになります。

preg_match ($emailregex, $plaintext, $emailaddress);
于 2013-01-05T23:35:17.390 に答える
0

「i」は正規表現をエスケープしません。正規表現内のすべての AZ リテラルが、大文字と小文字を区別せずにターゲットと一致する必要があることを表明します。次のように、正規表現のバックスラッシュをエスケープする必要があります。

$emailregex = '/^\\S+@\S+\\.\\S+$/i';

手元に PHP を搭載したマシンはありませんが、動作するはずです。他の人が言及しているように、preg_match への引数の順序も間違っていますが、正規表現で警告が表示される理由は、エスケープ スラッシュがないためだと思います。

于 2013-01-06T00:00:33.643 に答える