2012-02-24 11 views
3

私はregexpを作成しようとしていますが、John Smithのような名前に一致する必要があります。唯一の規則はファーストネームとラストネームで始まり、大文字で始まり少なくとも2文字でなければなりません。また、姓に最大20文字の制限があり、名前の間に昏睡または空白があります。これまでのところ私はこれを持っている:姓と名字の正規表現

/[A-Z][a-z]+(\s|,)[A-Z][a-z]{19}/ 

私はこのサイトでそれをテストしたとき、それは動作しません:http://www.regular-expressions.info/javascriptexample.html。私は何が逃したのか分からない。何か案は?

+2

のために役立つかもしれないいくつかの表現は、(1)十分な問題の説明が_never_ある「動かない」されています。 (2)なぜ正規表現をテストするためにあなたのブラウザコンソールを使用していないのですか? –

+1

@MДΓΓLLLL、実際には、私は正規表現が「動作しない」例外が有効な問題記述であると考えます。この領域では、それは暗黙のうちに「一致するものと一致しない」ことを意味し、一致させることを意図したものを正確に説明しました。 –

+1

これは本当に恐ろしい*恐ろしいアプローチです**あなたは知っています。それは絶望的にナイーブです。 RenéeFleming、Tim O'Reilly、John Paul Jones、WilliamMᶜKinley、Malcolm X、Cher、Dominique Strauss-Kahn、FedericoPeña、FrançoisMitterand、NicolaeCeauşescu、Chiang Kai-shek、MaríaJoséマルケス、ホセ・マリア・フアレス、フェデリコ・デル・サグラド・コサゾン・デ・ヘスス・ガルシア・ロルカ。 – tchrist

答えて

3

{19}{1,19}に変更してください。それ自身では、{19}は、 "前の文字の正確に19に一致"を意味します。 {1,19}は、「前の文字の1と19の間に一致します」を意味します。

/[A-Z][a-z]+(\s|,)[A-Z][a-z]{1,19}/ 

更新:これはあなたの要件を満たしていないとコメントしています。記述したように、それはおそらくあなたの要件の素朴な実装ですが、バグを修正しただけでは元の実装になります。あなたが実際の名前を探している場合は、より少ない素朴な実装は次のようになります。

/^[A-Z][-'a-zA-Z]+,?\s[A-Z][-'a-zA-Z]{0,19}$/ 

これは、それらがカンマで区切られている場合、名前と名前の間にコンマの後にスペースを可能にし、可能に、アポストロフィやダッシュで名前をキャッチします一文字の姓の場合しかし、コメント者が指摘しているように、これは正当な名前の名前と一致することができず、必ずしも名前のようなものではないものと一致しません。

アンカーも追加します。^$は、文字列全体が一致する必要があることを意味します。あなたが部分文字列を探している場合は、それらのアンカーを削除し、代わりに言葉で境界チェックを追加することができます。

/\b[A-Z][-'a-zA-Z]+,?\s[A-Z][-'a-zA-Z]{0,19}\b/ 
+0

「U」は完全に有効な姓です。 – georg

+0

@ thg435、多分、それはOPが正規表現にマッチさせたいものではありません。彼は具体的に言った、 "姓は大文字で始まり、少なくとも2文字長でなければならない"。 –

+0

これはRenéeFlemingやTim O'Reillyでは機能しません。またはMalcolm X.またはDominique Strauss-Kahn。みんなで、現実になる。 – tchrist

0
/^[A-Z][a-z]+[\s|,][A-Z][a-z]{1,19}$/.test("John Smith") // true 
+0

この正規表現は数値を許可します。どうすれば達成できるの? – bhavikshah28

0

これはあなた

\b[A-Z]+.+[?^ ][A-Z].{1,19}|\b[A-Z]+.+[?^,][A-Z].{1,19} 

のために働く必要がありますこれは、Aの先頭から始まります最初の文字が大文字であることを確認し、最初の単語を空白またはカンマまで一致させてから、次の単語の最初の文字が大文字であることを確認し、それ以降はすべて19文字に一致します。また、それぞれの名前が2文字以上であることを確認してください。

0

{19}は、姓が最初の大文字の後に正確に19の小文字を持つ必要があることを意味します。ここで

1

より複雑な名前

(^[A-Z][a-z]*$) - A typical First Name or Last Name like Thomas 
(^[A-Z][a-z][A-Z][a-z]*$) - names like McDonald 
(^[A-Z][a-z]*(-|\s)[A-Z][a-z]*$) - names like Tonya-Smith or Tonya Smith 
(^[A-Z]('|’)[A-Z][a-z]*$) - names like Tim O’Reilly 
(^[a-z]+\s[A-Z][a-z]*$) - names like von Gogh 
関連する問題