1

ページのテキストエリアでユーザー入力のフォームを制御したい。入力は次のようになります。

ここに画像の説明を入力

これは、1 つの行に 3 つの値のみがあり、最初の値と 2 番目の値の間、および 2 番目と 3 番目の値の間にセミコロンがあることを意味します。

今では、この正規表現を使用して検証しています:

^((([^;]+);([^;]*);([^;]+))\n?)*$

次のような入力を検証するため、100%機能しません

value1;value2;value3
value1

有効です。問題は改行と次の value1 の始まりです。value1 の後に最初のセミコロンが書き込まれるまで、value1 は前の行の value3 の末尾にまだ追加されているようです。これを無効にし、すべての新しい不完全な行を無効としてマークするには、正規表現をどのように変更すればよいですか?

デモ用に JS フィドルを作成しました: https://jsfiddle.net/tw2y5omc/3/

4

1 に答える 1

1

次の正規表現:

^((?:[^;]+;){2}(?:[^;\n\r]+))$
# captures everything into a group
# matches everything except a semicolon, followed by a semicolon two times
# afterwards everything except a semicolon or newlines being bound to the end of the string

空の値も許可する場合は、代わりに星を使用します。

^((?:[^;]*;){2}(?:[^;\n\r]*))$

regex101.com のデモ

于 2016-01-27T12:24:18.857 に答える