私があなたの要件を正しく理解しているかどうかを確認してください:
- 1つ以上の
a-z
、、A-Z
スペース(ASCII 32)。正確に1つ-
- スペースとハイフンを文字列の最初または最後に置く
-
ことはできませんが、1つのスペースと1つのハイフンが必要である-
ため、文字列はアルファベット文字で開始および終了する必要があります。
- ハイフン
-
とスペースを隣り合わせにすることはできません。連続したスペースや連続したスペース-
も許可されていないと思います。
上記の要件の場合、この正規表現は文字列を検証する必要があります。
^(?!.*[- ]{2})(?=.* )[a-zA-Z][a-zA-Z ]*-[a-zA-Z ]*[a-zA-Z]$
簡単な説明:
(?!.*[- ]{2})
:ハイフンとスペースが隣り合っていないことを表明し、連続するスペースとハイフンも禁止します。
(?=.* )
:文字列に少なくとも1つのスペースがあることを確認してください
[a-zA-Z][a-zA-Z ]*-[a-zA-Z ]*[a-zA-Z]
:上記の分析によると、最初と最後の文字はアルファベット文字です(文字列内の同じ位置にすることはできません)。これにより、スペースとハイフンが暗黙的に禁止されます。ハイフンは1つだけ使用でき、残りは任意の数のアルファベットとスペースです。
複数の正規表現を使用してこれを記述することもできます-コードは少し明確になります:
// No hyphen and space at the beginning and the end. Exactly 1 hyphen.
// The string only contains alphabet, space and hyphen
/^[a-zA-Z][a-zA-Z ]*-[a-zA-Z ]*[a-zA-Z]$/.test(str) &&
// Hyphen and space cannot be directly next to each other
// Consecutive hyphens, or consecutive spaces are also disallowed
!/[- ]{2}/.test(str) &&
// At least one space in the string, can be replaced with indexOf
/ /.test(str)