私はこの正規表現があります:^[a-zA-Z]\s{3,16}$
のRegExpスペース文字
私がしたいことは、例えば、任意のスペースで任意の名前を一致させることであるジョン・スミス、それは長い3〜16文字が含まれていますが...
何午前私は間違っている?
私はこの正規表現があります:^[a-zA-Z]\s{3,16}$
のRegExpスペース文字
私がしたいことは、例えば、任意のスペースで任意の名前を一致させることであるジョン・スミス、それは長い3〜16文字が含まれていますが...
何午前私は間違っている?
背景
ここで注意すべき点がいくつかあります。まず、量子(この場合は{3,16}
)は最後の正規表現トークンにのみ適用されます。だからあなたの現在の正規表現が本当に言っているのは、 "アルファベットの文字(大文字小文字を区別しない)と3〜16個の空白文字(スペース、タブなど)を持つ文字列にマッチさせることです"
は、2つ以上の部分(中名、 "De La Cruz"などの民族名)を持つか、アクセント付き母音などの特殊文字を含むことができます。これがあなたのプログラムで説明する必要があるものかどうかを検討する必要があります。これらのことは重要であり、本物のアプリケーションで考慮する必要があります。
前提と今
回答、ちょうどあなたが唯一の姓、名、およびスペースで構成名の特定のフォーマットを必要とします。シンプルなASCII文字(つまり、特殊文字やアクセント記号のついていない文字)だけが必要だと仮定しましょう。さらに、ファーストネームとラストネームの両方は、大文字とそれに続く小文字のみで始まる必要があります。それ以外に、名前の個々の部分の長さに制限はありません。
^(?=.{3,16}$)[A-Z][a-z]+ [A-Z][a-z]+$
ノート
^
文字がpositive lookaheadと呼ばれるものになった後の最初のトークン:この場合は、次の正規表現は、トリックを行うだろう。基本的に前向きな外観は、文字列に一致するカーソルの位置を実際に移動させることなく、(?=
の開始点と)
の間の正規表現に一致します。
お知らせ通常はには(空白)しか必要ないので、
\s
トークンを削除しました。タブやその他の空白が必要な場合は、スペースを\s
トークンに置き換えることができます。
名前がの場合は、に大文字で始まり、その後に小文字のみを指定する必要があります。
原油英語翻訳
ご理解を助けるために、ここでの正規表現が実際に何をしているかの簡単な英語の翻訳があります。イタリック体の部分は、正規表現の英語翻訳の最初の部分からコピーされます。
一つ以上続い資本アルファベット文字が続く単一のスペースに続いて「3-16文字があり、一つ以上の(
+
)に続いて、資本アルファベット文字で始まる任意の文字列にマッチアルファベット(+
)アルファベット文字と小文字で終わります。
ツール
私は挑戦的な正規表現に取り組むためにしようとしていたときに使用したいツールがいくつかあります。
編集/更新
あなたはJavaScriptであなたの正規表現を使用しているあなたのコメントで述べました。 JavaScriptは、正規表現を囲むスラッシュを使用して正規表現を判別します。この単純なケースでは、正規表現を使用して文字列に一致させる2つのオプションがあります。
まず、
"John Smith".match(/^(?=.{3,16}$)[A-Z][a-z]+ [A-Z][a-z]+$/);
第二を次のように正規表現を作成し、そのtest()
メソッドを使用し、String
の試合メソッドを使用します。例えば、
/^(?=.{3,16}$)[A-Z][a-z]+ [A-Z][a-z]+$/.test("John Smith");
後者は、あなたが、それは単にtrue
またはfalse
は正規表現が実際に文字列と一致するかどうかに応じて、返して欲しいものと考えられます。
すべての説明をありがとう、今私はそれを明確にして、それは私のプログラムでうまく動作します。ありがとうございました –
現時点では、1つの文字 'a'〜 'z'(大文字または小文字)と一致し、その後に3〜16個のスペースが続きます。量指定子は '\ s'にのみ適用されます。 –
正規表現をデバッグしようとすると、https://www.debuggex.com/r/GFfROJSrQEMa2mtaのような過去のサイトを見ていないと、問題を非常に早く見つけることができません。 – Shadow
@shadowこれはすてきな小さなツールです。私もregex101.comが好きです。それは完全に無料です。 – c1moore