2017-10-13 6 views
1

私は右のユーザーのFirstName + LastNameのこのようMiddleNameのチェックを検証するためにそれを取得しないように見える:それの有無にかかわらず正規表現ミドルネームのイニシャルが

John Doe - Valid 
John M Doe - Valid 
John Mr Doe - Invalid 
John m Doe - Invalid 

ので、MiddleNameは大文字ことができます。私が思い付いた何

  • のFirstName + LastNameのは、少なくとも3文字を持っている必要があります - OK
  • は常に、姓と名であるべき - OK

はどのように把握することはできませんミドルネームが存在する場合には1つのチャートしか持たないことを確認してください。

私の現在の正規表現は、このようなものです:

var isValid = /^((\b[a-zA-Z]{3,40}\b)\s*){2,}$/.test($(this).val()); 
// ^((\b[a-zA-Z]{3,40}\b)\s*){2,}$ - actual regex 
+0

最大文字数には40文字を含めることができますか?それらのための最大の文字制限はありますか?私は、姓と名の中に任意の数の文字列がある場合、なぜ限定数量詞に '40 'を使うのでしょうか? –

答えて

3

あなたは

/^[a-zA-Z]{3,40}(?:\s[A-Z])?\s[a-zA-Z]{3,40}$/ 

を使用することができregex demoを参照してください。 注:{3,40}は、数値化されたサブパターンの3〜40の連続した出現(つまり、ここでは[a-zA-Z]の文字パターン)に一致するlimiting quantifierです。名字の上限(最大文字数制限) 、ちょうど40を削除

詳細

  • ^ - 。文字列の先頭
  • [a-zA-Z]{3,40}から3〜40のASCII文字
  • (?:\s[A-Z])? - (ここで
    • \sの任意配列 - 空白
    • [A-Z] - 単一大文字 ASCII文字
  • \s - 空白
  • [a-zA-Z]{3,40}から3 〜40文字のASCII文字
  • $ - 文字列の最後。

JSのデモ:

var strs = [' John Doe', 'John M Doe', 'John Mr Doe', 'John m Doe']; 
 
var rx = /^[a-zA-Z]{3,40}(?:\s[A-Z])?\s[a-zA-Z]{3,40}$/; 
 
for (var s of strs) { 
 
    console.log(s, "=>", rx.test(s)); 
 
}

+0

正規表現のあなたの説明のおかげで –

+0

私はもっとテストする見栄えます。また、偉大な説明の男 – 123onetwothree

+0

私は大文字にその文字(middlename)を強制することはできますか? – 123onetwothree

2

は、この正規表現を試してみてください:デモの

/^[A-Za-z]{3,}\s+([A-Z]\s+)?[A-Za-z]{3,}$/ 

Check here。それがどのように動作するかの


説明:文字列の

  • ^スタート。
  • [A-Za-z]{3,} 3文字以上を確認します。
  • \s+は、1つ以上の空白文字をチェックします。
  • ([A-Z]\s+)? 1つの大文字とそれに続く1つ以上のwhitepscae文字をチェックします(オプション)。したがって、1つの文字+スペース、または何も一致しません。
  • [A-Za-z]{3,}は、3文字以上確認します。
  • $文字列の最後。
+0

あなたはJo3n Doeを許可する例 – 123onetwothree

+0

さらに、['____ ____'](https://regex101.com/r/gc5efi/3)にもマッチします。 '\ w' a * word * charは、英数字*および*' _'文字と一致するので、名前を付ける方が適切です。 –

+0

より厳密な一致のために更新されました。 – chocochaos

関連する問題