1

フォームを検証して、ユーザーに次のようにフルネームを入力させようとしています。

最初の最後

ユーザーは、アルファベットのみの文字列、コンマ、スペース、姓の順に入力する必要があります。これも、任意の文字列にすることができます。

これは私の現在の正規表現です。

var alphaExp = /^[a-zA-Z,+ a-zA-Z]+$/;

ただし、ユーザーはjohnのような単純なものを送信できます。ジョン、スミスなどを強制的に提出させたい。

4

4 に答える 4

3

あなたがしているのは[]、次の文字のいずれかに一致する文字クラス()を作成することですa-zA-Z,+。これによりjohn、正規表現全体を一致させることができます。

これはあなたが望むものです:

/^[a-zA-Z]+, [a-zA-Z]+$/

ただし、名前についての仮定は少し間違っていることをお伝えしたいと思います。誰かがジョン・オコナーという名前の場合はどうなりますか?またはエステバンペレス?または単にNg(名のみ)?

「誰かの名前に特定の文字しか含めることができないと信じているコードは、愚かで、攻撃的で、間違っています」-tchrist

確かに、あなたは人々にただのぎこちない入力をさせたくはありませんが、ユーザーがあなたの正しさの考えに必ずしも適合しないが、それでも正しいものを入力するためのオプションを残します。

于 2012-11-15T20:20:19.497 に答える
1

これは、文字セットが機能する方法ではありません。

/^[a-zA-Z]+, [a-zA-Z]+$/

考慮事項:

  • クライアントで行う検証はすべてバイパスできます
  • 一部の人々はアクセント付きの文字で名前を持っているかもしれません
  • 一部の文化では、2つの名前だけを使用していません
于 2012-11-15T20:20:38.260 に答える
0
^[a-zA-Z]+, [a-zA-Z]+$

動作するはずですが、「.」を防止しますか? J.フッカーのように?「Jan van Hoogstrum」のような単語はありますか? また、アクセント付きの文字が使用されないようにしていることにも注意してください。オプション(アンダースコアは許可されますが)は、次を使用すること\wです:

^(\w+ )$

これにより、「name name name...」が得られます。名前を「最初、最後」と入力する方法は一般的ではないため、多くのユーザーをイライラさせます。

于 2012-11-15T20:21:11.513 に答える
0

最初の文字のみを大文字にするための正しい正規表現は次のようになります。

/^[A-Z][a-z]+, [A-Z][a-z]+$/

于 2012-11-15T20:22:36.720 に答える