【问题标题】:Angular ng-pattern: textarea format regexAngular ng-pattern:textarea 格式正则表达式
【发布时间】:2016-01-27 20:39:23
【问题描述】:

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

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

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

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

它不能 100% 工作,因为它会像

那样验证输入
value1;value2;value3
value1

有效。问题是新行和下一个 value1 的开头。似乎直到在 value1 之后写入第一个分号,value1 仍然附加到前一行中 value3 的末尾。我应该如何更改正则表达式以禁用此功能并将每个新的不完整行标记为无效?

我创建了一个 JS fiddle 来演示: https://jsfiddle.net/tw2y5omc/3/

【问题讨论】:

    标签: html angularjs regex ng-pattern


    【解决方案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]*))$
    

    演示on regex101.com

    【讨论】:

    • 还是一样的过程。这种输入应该是无效的:regex101.com/r/xS6iC0/4
    • 谢谢。我只将 {2} 更改为 (?:[^;]*;) 因为中间值是可选的。
    • 对不起,但它还没有帮助。例如,此输入不应该是有效的,但它是:regex101.com/r/xS6iC0/6。正则表达式没有对前几行的回查。
    • @witcher:排除了所有三组中的换行符 - regex101.com/r/xS6iC0/7 原始问题中的可选部分并不明显。
    • 它是原始正则表达式的一部分(您可以在分号之间看到 * 字符:...;([^;]*);... value2 应该在哪里)。但我知道你不必注意。我试图在您最后一条评论之前将 \n\r 添加到每个值部分,但这不是答案,因为现在 textarea 中只有一行被标记为有效。看一看:jsfiddle.net/tw2y5omc/8。当您尝试仅使用一行时,可以,但不能使用多行。
    猜你喜欢
    • 2017-09-09
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 2016-05-04
    • 1970-01-01
    相关资源
    最近更新 更多