2

一重引用符で囲まれた正規表現を使用して文字列を一致させる必要があります

  1. ゼロ回または 1 回出現する可能性があります
  2. 文字列の先頭または末尾にあってはなりません
  3. その前に少なくとも 1 つのアルファベットが必要です (一重引用符が表示される場合)

文字列の最小長は 2 で、最大長は 25 文字を超えてはなりません
最大 2 つのスペースを使用できます

次の質問から、文字の単一の出現のみを取得することについていくつかの助けを借りました(私の場合は一重引用符)

多かれ少なかれ単一の出現のみに一致するJavascript Regex

そしてこれを思いついた

^([^']([a-zA-Z])+(\s){0,1})+('){0,1}([a-zA-Z][^'])+$

正規表現の視覚化

Debuggex でライブ編集

一致するサンプル文字列

  • シャノン・ドコスタ
  • シャノン・メシューズ
  • RCS
  • J・ディコスタ

一致させないサンプル文字列

  • シャノン・ドコスタ
  • シャノン・ドコスタ
  • Shanon Dcosta (シャノンの前のスペースまたは Dcosta の後のスペース)
  • シャノン・ドコスタ」
  • シャノン・ローレンス・ジェームズ・ディコスタ
  • シャノン・コスタ

問題:

  1. 私の正規表現は、スペースで始まる文字列に一致します
  2. shanon d'cos と shanon d'costa には一致しませんが、shanon d'costには一致します
  3. 最大25文字も機能していません

これに関するヘルプ/アドバイスをいただければ幸いです。

EDIT 12-Sept-2013
文字列には、一重引用符とスペース以外の特殊文字を含めないでください

4

2 に答える 2

4

先読みを使用して、独自に条件を確認しています。

/^(?=[a-z ']{2,25}$)(?=(?:\S+\s){0,2}\S*$)(?:[^']*|[^']*?[a-z]'[^']+)$/i

^                      # from start of string
(?=[a-z ']{2,25}$)     # 2 to 25 of the allowed chars until end of string
(?=(?:\S+\s){0,2}\S*$) # at most two spaces until end of string
(?:                    # either
 [^']*                 # no apostrophe
|                      # or
 [^']*?[a-z]'[^']+     # exactly one apostrophe preceded by alphabet letter
)$                     # to end of string

しかし、それらはコードで分けたほうがよいでしょう。だから使う

str.length >= 2 && str.length <= 25
 && /^(?:\S+\s){0,2}\S*$/.test(str)
 && /^[a-z ]*(?:[a-z]')?[a-z ]+$/i.test(str)
于 2013-09-12T15:03:00.930 に答える
0

先読みを使用して引用符の使用法をアサートし、全体のサイズを単純に繰り返します。

^(?=([^']*[a-zA-Z]')?[^']+$).{2,25}$

与えられたすべての例で正しく動作するライブ デモを参照してください。

于 2013-09-12T14:58:17.833 に答える