0

正規表現を使用して PHP で名前を検証する関数を作成しようとしています。名前に無限のスペースと ' および - を使用できるようにし、スペースの後には大文字のみを許可し、後には大文字を許可しないようにします- および '.. また、全長は 50 文字で、名前は小文字で終わる必要があります。大文字は A から Z にこれらの文字を加えたものであることに注意してください。

ÙÒÌÈÀÁÉÍßÓÚÝâÊÎÔÛãÑÕÄÅÆŒÇÐØËÏÖÜŸ

小文字は a から z にこれらの文字を加えたものです。

éçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß

各単語 (スペース、' または - の間) は少なくとも 2 文字をカウントする必要があります 名前も大文字で始まり、小文字で終わる必要があります。最初のそれは許される

許容される名前の例は次のとおりです。

Adam Klsld
Adam'odskdl
Adam'Ddlsl
Ùdam-ddkkdk
Addssd-Ddsdsd

私は多くのことを試みてきましたが、これが私のphpファイルにまだ保持している最後の試みです.失敗した試みの混乱の中で削除した他のものです(mb_ereg関数を使用して一致させるため、これはposix-ereです) :

([A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ][a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß]+){1}((^[\'\-\s])[A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ][a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß]+)*

(これは必ずしもそれが最良の試みであることを意味するわけではありませんが、私がどれだけ馬鹿なのかを知るのに役立つかもしれません)

4

3 に答える 3

1

これを使用することをお勧めしません...しかし、これはあなたが望むものだと思いますか?

^([A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ][a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß]+){1}((([\s])[A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ][a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß]+)|((['\-])([A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ]|[a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß])[a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß]+))*$

ここでは非コード ブロックにあるので、それがいかに正気でないかがわかります... ただし、ここではいくつかの文字が削除されていると思います:

^([A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ][a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß]+){1}((([\s])[A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ][a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß]+)|((['-])([A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ ]|[a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß])[a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæçðøß]+))*$

于 2013-05-04T00:27:26.287 に答える
0

これを使用して、アクセント付き文字の問題を回避できます。

$pattern = "~^[\p{Lu}ß]\p{Ll}*+(?>(?> [\p{Lu}ß]|['-]\p{L})\p{Ll}*+)*$~u";
if(preg_match($pattern, $name)) { ...

または、より具体的な文字セットの場合:

$pattern = "~(?(DEFINE)(?<Up>[A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ]))
             (?(DEFINE)(?<Lo>[a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß]))
             ^\g<Up>\g<Lo>*+(?>(?>\h\g<Up>|['-]\g<Up>?+\g<Lo>)\g<Lo>*+)*+$~ux";

if (preg_match($pattern, $name, $matches)) { ...

またはより短い方法で同じ:

$pattern = "~(?(DEFINE)(?<Up>[A-ZÀ-ÖØ-ݟߌ]))
             (?(DEFINE)(?<Lo>[a-zà-öø-ýÿßœ]))
             ^\g<Up>\g<Lo>*+(?>(?>\h\g<Up>|['-]\g<Up>?+\g<Lo>)\g<Lo>*+)*+$~ux";
于 2013-05-04T00:40:33.757 に答える