【问题标题】:Javascript Regex to Limit number of characters per lineJavascript正则表达式限制每行的字符数
【发布时间】:2020-08-26 12:23:32
【问题描述】:

我正在尝试创建一个 JS 正则表达式来限制 html 文本区域中每行的字符数。理想情况下,我更喜欢将它作为 Javascript 正则表达式,因为它更容易用于我们的表单验证引擎。

我想创建一个正则表达式来验证一个字符串每行有 10 个字符,最多 3 行

我们的想法是验证如下字符串:

01234567890
a
b

这里的第一行有 11 个字符,所以整个字符串应该被拒绝/

a
b
c
d

此文本有 4 行,因此也应该被拒绝。

我已尝试使用以下正则表达式,但未按预期工作:

^((?:\n)?[^\n]{0,10}){0,3}$

关于我做错了什么的任何线索?

【问题讨论】:

    标签: javascript regex character line limit


    【解决方案1】:

    你可以使用

    ^.{0,10}(?:\r?\n.{0,10}){0,2}$
    

    见regex demo

    详情

    • ^ - 字符串开头
    • .{0,10} - 除换行符以外的零到十个字符
    • (?:\r?\n.{0,10}){0,2} - 零次、一次或两次
      • \r?\n - CRLF 或 LF 行结束
      • .{0,10} - 除换行符以外的零到十个字符
    • $ - 字符串结束。

    JavaScript:

    const valid_rx = /^.{0,10}(?:\r?\n.{0,10}){0,2}$/;
    const testFunc = () => {
        if(!valid_rx.test(document.all.mytextarea.value))
        {
            console.log("Please use correct format.");
            return false;
        }
    }
    <textarea id="mytextarea" cols="50" rows="10">a
    b
    c
    </textarea>
    <button onclick="testFunc()">Click Me</button>

    【讨论】:

    • 编辑队列已满,暂时无法执行此操作,但请注意 ^^ 和 $ 不是字符串的开始/结束,而是行的开始/结束。验证用户输入的重要区别。 \A 和 \z 是字符串的开始/结束。
    • @MahNas92 你错了。这是一个 JavaScript 线程。注意 ECMAScript 风格。
    • 啊,完全错过了,从搜索引擎来到这里,完全专注于正则表达式本身。我的不好,谢谢你指出来!
    • @MahNas92 你所说的与Ruby(Onigmo/Oniguruma)正则表达式风格有关,其中^和$匹配行开始/结束和\A/\z匹配开始/结束字符串。
    • Java regex 风格和 Kotlin(我认为它也使用 Java)也是如此。但它似乎也是标准的(或至少是主流)。我找不到任何将其固定为特定风味的参考。也许你可以帮助我提供这样的来源/参考?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    相关资源
    最近更新 更多