私はそれを検索、検索、再生、再生しましたが、完全ではありませんが、1つの変数として提供された姓名を検証しようとする他の人を助ける可能性があります。
私の場合、その変数は$ nameです。
PHPに次のコードを使用しました。
if (preg_match('/\b([A-Z]{1}[a-z]{1,30}[- ]{0,1}|[A-Z]{1}[- \']{1}[A-Z]{0,1}
[a-z]{1,30}[- ]{0,1}|[a-z]{1,2}[ -\']{1}[A-Z]{1}[a-z]{1,30}){2,5}/', $name)
# there is no space line break between in the above "if statement", any that
# you notice or perceive are only there for formatting purposes.
#
# pass - successful match - do something
} else {
# fail - unsuccessful match - do something
私はRegExを自分で学習していますが、RegExバディから提供されたコードの説明があります。
ここにあります:
単語の境界で位置をアサート«\ b»
以下の正規表現に一致し、その一致を後方参照番号1に取り込みます
«([AZ] {1} [az] {1,30} [-] {0,1} | [AZ] {1} [-\ '] { 1} [AZ] {0,1} [az] {1,30} [-] {0,1} | [az] {1,2} [-\ '] {1} [AZ] {1} [ az] {1,30}){2,5}»
2〜5回、可能な限り多くの回数、必要に応じて還元(貪欲)«{2,5}»
*このノートの文法を理解するために、いくつかの助けが必要です *
注:キャプチャグループ自体を繰り返しました。グループは最後の反復のみをキャプチャします。繰り返されるグループの周りにキャプチャグループを配置して、すべての反復をキャプチャします。«{2,5}»
以下の正規表現のいずれかに一致します(これが失敗した場合にのみ次の代替を試みます)«[AZ] {1} [az] {1,30} [-] {0,1}»
「A」から「Z」までの範囲の1文字と一致«[AZ] {1}»
正確に1回«{1}»
「a」から「z」までの範囲の1文字と一致«[az] {1,30}»
1から30回、可能な限り多くの回数、必要に応じて還元(貪欲)«{1,30}»
リスト「-」にある1文字に一致«[-] {0,1}»
0から1回の間、可能な限り多くの回数、必要に応じて還元(貪欲)«{0,1}»
または、以下の2番目の正規表現に一致します(次の代替案が失敗した場合にのみ試行します)«[AZ] {1} [-\ '] {1} [AZ] {0,1} [az] {1,30} [ -] {0,1}»
「A」から「Z」までの範囲の1文字と一致«[AZ] {1}»
正確に1回«{1}»
以下のリストにある単一の文字に一致«[-\ '] {1}»
正確に1回«{1}»
文字「-」«-»の1つ「 '」文字«\'»
「A」から「Z」までの範囲の1文字と一致«[AZ] {0,1}»
0から1回の間、可能な限り多くの回数、必要に応じて還元(貪欲)«{0,1}»
「a」から「z」までの範囲の1文字と一致«[az] {1,30}»
1から30回、可能な限り多くの回数、必要に応じて還元(貪欲)«{1,30}»
リスト「-」にある1文字に一致«[-] {0,1}»
0から1回の間、可能な限り多くの回数、必要に応じて還元(貪欲)«{0,1}»
または、以下の3番目の正規表現に一致します(一致しない場合はグループ全体が失敗します)«[az] {1,2} [-\ '] {1} [AZ] {1} [az] {1,30} »
「a」から「z」までの範囲の1文字と一致«[az] {1,2}»
1〜2回、可能な限り多くの回数、必要に応じて還元(貪欲)«{1,2}»
「」と「 '」の間の単一の文字に一致します«[-\'] {1}»
正確に1回«{1}»
「A」から「Z」までの範囲の1文字と一致«[AZ] {1}»
正確に1回«{1}»
「a」から「z」までの範囲の1文字と一致«[az] {1,30}»
1から30回、可能な限り多くの回数、必要に応じて還元(貪欲)«{1,30}»
この検証は、フォームに記入するすべての人が西洋の名前を持っていることを完全に想定していることを知っています。これにより、世界中の大多数の人々が排除される可能性があります。しかし、これは正しい方向への一歩だと感じています。おそらく、この正規表現は、教祖が単純に対処するには基本的すぎるか、または上記のコードを検索で見つけることができなかった他の理由がある可能性があります。私はこのビットを理解しようとするのにあまりにも長い時間を費やしました。以下の私のテスト名を見ると、おそらくあなたは私のすべてがこれにどれほど霧がかかっているかに気付くでしょう。
次の名前でコードをテストしました。結果は各名前の右の括弧内にあります。
- スティーブ・スミス(失敗)
- Stev3 Smith(失敗)
- スティーブ・スミス(失敗)
- スティーブ・スミス(失敗)
- スティーブSm1th(スティーブSmで渡される)
- d'Are to Beaware(Are to Beawareに渡されます)
- ジョーブロー(合格)
- ヒョギョンウ(合格)
- マイク・オニール(合格)
- スティーブジョンソンスミス(合格)
- ヨゼフ・シュモゼフ・ヒームデル(合格)
- O Henry Smith(合格)
- マタイダラス(合格)
- マーティンルーサーキングジュニア(合格)
- ダウンタウンジェームスブラウン(合格)
- ダレン・マッカーティ(合格)
- George De FunkMaster(合格)
- カーティスBボールバスケットボール(合格)
- アフマドエルジェフェ(合格)
基本的な名前がある場合、上記のコードが機能するためには、1つから5つまでが必要です。これは、テスト中に使用したものと同様で、このコードが適している場合があります。
改善点があればお知らせください。私はまだ初期段階です(RegExを理解する最初の数か月)。
おかげで、幸運、スティーブ