文本区域中每个单词的正则表达式最大长度 - JavaScript

Regex maxlength per word in textarea - JavaScript

我正在尝试一个正则表达式,它允许文本区域中每个单词不超过 17 个字符。我尝试了几个表达式,但直到现在都没有成功。

例如,我正在尝试取得这样的成功:

ADQQ213323DS2D33S
ADQQ213323DSDDSDA
73721GE276G2E1772

只允许数字和字母以及 space 或换行。

我试过的正则表达式:

^[a-zA-Z0-9\n]{17}$

HTML5 <textarea> 标记上的 pattern 属性不够强大,无法执行您需要执行的操作,因为您需要 s 标志,以便 ^$ 锚点也将匹配行的开始和结束。以下正则表达式还使用 i 标志来区分大小写:

/^\s*([a-z0-9]{1,17}(\s+|$))*$/is
  1. ^ 匹配字符串的开头或一行的开头
  2. \s* 匹配 0 个或多个白色 space 字符
  3. ([a-z0-9]{1,17} 匹配 1 到 17 个字母或数字
  4. (\s+|$) 匹配一个或多个 space 或行尾
  5. * 第 3 步到第 5 步重复 0 次或多次
  6. $匹配行尾或行尾或字符串尾。

以下代码片段为 textarea 安装了一个 onkeyup 处理程序,以便在 textarea 中出现每个新字符后,根据正则表达式测试内容,如果测试失败,则恢复之前的内容。

function setupField(field, re)
{
    field.autocomplete = "off";
    field.saveValue = field.value;
    field.onkeyup = function() {
        var v = field.value;
        if (v === '' || re.test(v)) {
            field.saveValue = v;
        }
        else {
            field.value = field.saveValue;
        }
    };
}

function setup()
{
  let regex = /^\s*([a-z0-9]{1,17}(\s+|$))*$/is;
  setupField(document.f.ta, regex);
}
<html>
<body onload="setup();">
<form name="f">
   Enter text:<br>
   <textarea name="ta" rows="5" cols="60"></textarea>
</form>
</body>
</html>