2

フルネームフィールドを検証するためにJavaスクリプトで正規表現を使用しています。任意の文字の 1 つ以上のインスタンスを受け入れるための検証が必要です。[a-z A-Z]また、フィールドには 1 つと-スペース文字を含める必要があります。

私が使用している現在の正規表現は次のとおりです。("^[a-zA-Z\\-\\\s]*$");

この正規表現は、私が望むものの正しい入力を許可していますが、ユーザーにスペースと - を挿入するように強制することはありません。これには検証を含める必要があります。私は正規表現に非常に慣れておらず、昨日紹介されたばかりなので、特定の文字の正しい使用法を完全には理解していません。

また、スペースと - がフィールドの最初または最後にあり、互いに直接隣り合わないようにしたくありません。

有効な入力の例:

John smi-th
dereK al-jamone
ro-binstanle y

この検証が珍しいことは承知していますが、正規表現をよりよく理解できるようにするための助けに非常に感謝しています.

4

3 に答える 3

1

私があなたの要件を正しく理解しているかどうかを確認してください:

  • 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)
于 2013-01-16T12:19:19.377 に答える
0

1 つのスペースと 1 つのハイフンのみが存在できることを確認する必要がある場合は、2 つの異なる正規表現をチェックすることを選択します。いずれかが一致する場合、それは有効です...

ハイフンの前にスペースを入れて...

^[a-zA-Z]*\s.[a-zA-Z]*\-.[a-zA-Z]*$

ハイフンの後にスペースを入れる

^[a-zA-Z]*\-.[a-zA-Z]*\s.[a-zA-Z]*$

これが実際の例です

于 2013-01-16T11:56:00.470 に答える
0

これは、あなたの望むことですか?

^[A-Za-z\s]+(-(?!-)[A-Za-z\s]+)+$
于 2013-01-16T11:49:46.643 に答える