【问题标题】:HTML input pattern not working validationHTML 输入模式无效验证
【发布时间】:2017-04-21 22:00:10
【问题描述】:

我有一个很奇怪的问题。

在带有一个输入字段的非常示例的搜索表单中:

 <input pattern="\S.{3,}"  name="text"/>

值验证失败

 dds sdsd
,但是JS说没关系。
/\S.{3,}/.test('     dds sdsd')
true
/\S.{3,}/.test('    ')
false

也许我遗漏了一些小东西或模式错误,但根据 regex.com,它应该是有效的。
这个想法是为了防止提交空白。我正在寻找不写JS代码的解决方案。

<form method="GET" action="/">
<input class="form-control" name="text" type="text" pattern="\S.{3,}"  />
<input type="submit" value="search" >
</form>

【问题讨论】:

  • 您在第一个示例(部分)中有拼写错误

标签: javascript html regex validation


【解决方案1】:

HTML5 pattern默认锚定,^(?:)$通过JS正则引擎时添加在模式的开始/结束。

你需要使用

<input pattern=".*\S.{3,}.*"  name="text"/>

使用RegExp#test 使其工作方式与在 JS 中相同。

但是,要在输入中至少需要 1 个非空白字符,我建议使用

<input pattern="\s*\S.*"  name="text"/>

this regex demo。它将匹配字符串开头的 0+ 个空白字符 (\s*),然后匹配任何非空白字符 (\S),然后贪婪地抓取任何 0+ 个字符,直到输入结束。

<form method="GET" action="/">
<input class="form-control" name="text" type="text" pattern="\s*\S.*" title="No whitespace-only input allowed."/>
<input type="submit" value="search" >
</form>

【讨论】:

  • 谢谢.*\S.{3,}.* 成功了。我的目标是在输入中至少有 3 个符号
  • 任何 3 个符号?还是 3 个连续的非空白符号?还是字符串中任意位置的 3 个非空白符号?请告知实际要求,因为 \S.{3,} 看起来很奇怪:一个非空白字符后跟任意 3 个或更多字符。
  • 是的,这很奇怪。如果我有前导空格但字符串中有' a a',它应该匹配。我的意思是像修剪开始和结束。目前最好的是.*\S.{1,}\S
  • 好的,如果您计划需要至少 3 个非空白符号,请使用 pattern="(?:\s*\S){3}.*"。要匹配字符串中至少 3 个连续的非空白符号,请使用 pattern=".*\S{3}.*"。如果您需要更多帮助,请随时发表评论。
  • 字母之间的空格是正确的。只有开头和结尾的空格应该被忽略。我认为,先前评论的模式有效。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-03
  • 2020-06-11
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多