2011-07-27 7 views
0

人の名前にハイフンとアポストロフィを許可し、すべての数字と特殊文字を許可しない正規表現があります。今は2つの名前に制限していますが、無制限の名前を許可したいだけで、ハイフンとアポストロフィを許可します。スペースで区切られた無制限の単語を許可しようとしています

^\s*[a-zA-Z]+(([\'\-\+\s]\s*[a-zA-Z])?[a-zA-Z]*)\s*$ 

私はそれができるようにする必要があります:デニスデニスのデニス・sのデニスなど。今のところ、それは唯一の2つの単語を可能にし、第三の単語に不一致を返します。

答えて

1

あなたが説明したものです:

^\s*    #Match 0+ whitespace 
[a-zA-Z]+   #Match 1 or more alpha characters 
(     #Capturing Group 1 
    (    #Capturing Group 2 
     [\'\-\+\s]  #Match one of these characters. 
     \s*    #Match 0+ whitespace 
     [a-zA-Z]   #Match one alpha character 
    )?    #0 or 1 of Group 2 
    [a-zA-Z]*   #0+ alpha characters 
)     #End Group 1 
\s*    #Then 0+ whitespace. 
$ 

そこには何ができるの改善のかなり多くがあるが、私はちょうどあなたができる最小の変更になります+で全部の周りに余分なグループを置くと思う:

^(\s*[a-zA-Z]+(([\'\-\+\s]\s*[a-zA-Z])?[a-zA-Z]*)\s*)+$ 
+0

パーフェクト!ありがとう.. :) – Dennis

1

あなたは無制限の名前を許可するために、あなたのregExを後方に書いているように見えます。代わりに、名前に特殊文字が含まれていないことを確認する必要があります。

var myname="whatever"; 
if ((/\$|\/|\^|-/, "g").exec(myname)){ 
    alert("this has special characters"; 
}else{ 
    alert "this does not"; 
} 
+0

そのことのようにこれを理解していません私は使用することができます正規表現の形式:( – Dennis

+0

私はいつもタグを見ていなくてもデフォルトでjavascriptでコードを書く...私の間違い、愚かな脳 –

1

あなたにはいくつかのオプションがあります。

  1. だけで有効な文字だけを可能にします。欠点は、アレンジメントが変わっている可能性があることです。あなたが過度に厳格ではなく、考えられなかったものを拒絶する可能性があるということです。

    ^[A-Za-z'+\-\s]+$ 
    
  2. 有効な名前パターンの繰り返しグループを作成します。これはあなたが何をしようとしているかのようですが、正確にはとは何の有効な名前が指定されていません。このパターンは言う

    /^\s*(?:\s?[A-Za-z]+(?:[\-'+][a-zA-Z]+)?)+\s*$/ 
    

    開始、0以上の空白、そして1またはグループの以上:(第2以降の単語のためのオプションのスペース()、1またはそれ以上の例はここにあなたの例に基づいて、ですAZ、およびオプションのグループ:(1つのダッシュ、アポストロフィ、またはプラスして、1以上AZ))、0以上の空白、末尾ここ

関連する問題