1

我想控制页面上 textarea 中用户输入的形式。输入必须看起来完全像这样:

在此处输入图像描述

这意味着一行中只有三个值,第一个和第二个值之间以及第二个和第三个值之间的分号。

现在我正在使用这个正则表达式来验证它:

^((([^;]+);([^;]*);([^;]+))\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 回答