1

編集:質問に間違った表現を実際に含めたので、今は少しばかげているように感じます。正しい式は ですが/^([ \u00c0-\u01ffa-zA-Z'\.\-])+$/、同じエラーがスローされます (ただし、オフセットは 44 ではなく 5 です)。

JavaScript を使用して名前を検証するために使用する次の正規表現があります。

/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i

(これはスタック オーバーフローの回答から取得したものですが、リンクを提供するための元の質問を見つけるのに苦労していますが、恐れています)。

サーバーに送信する前に名前を検証するために使用しますが、データをサーバーに送信する他の方法があるため、サーバーで再検証する必要があることは明らかです (データは最終的に MySQL データベースに入力されます)。

John Smithこれは JavaScript で素晴らしく機能し、 、Henry O'Conner、などのあらゆる種類の名前を入力できますJérémie Dent-O'Brien。ただし、(次のコードを使用して) RegExp を PHP にコピーすると、ここに示すようなエラーがスローされます。

$nameRegEx = "[that expression from above]";
$r = $_POST["r"];
if(preg_match($nameRegEx,$r)){
    // do MySQL stuff
}else{
    trigger_error("Invalid name",E_USER_ERROR); // Obviously I won't use this in
                                                // the final script as it is
                                                // very un-user-friendly
                                                // (is that a word?)
}

警告: preg_match() [function.preg-match]: コンパイルに失敗しました: PCRE は、 /path/のオフセット44 (編集を参照) 5 で\L、\l、\N{name}、\U、または \u をサポートしていません21行目のto/file.php

致命的なエラー: 48 行目の/path/to/file.phpに無効な名前があります

率直に言って、私は RegEx についてほとんど知らないので、ここで何が問題なのか見当がつきません。ちょっとした調査によると、JS と PHP はどちらも Perl 構文に基づいて正規表現を使用しているため、それほど違いはありませんが、いくつかの違いがあり、これが壊れている理由です。PHPで動作するように変換するにはどうすればよいですか? そこにある種の自動コンバーターはありますか?

他の人も同様の問題を抱えていましたが、彼らの問題は正規表現に固有のものであるため、正規表現でその情報をどのように使用できるかわかりません。

誰かがこれを変換する正しい方向に私を向けることができますか?

4

1 に答える 1