使用 HTML5 输入模式强制使用有效的主机名



我正在ESP8266控制器上处理一个C++项目并显示强制门户。 门户本身由外部库创建,在生成的门户页面方面存在一些限制。 我只能向代码创建的表单字段添加属性。 换句话说,我有一个在页面/门户上生成的输入字段,我可以使用patternminmax等属性对其进行修改。

我想允许用户输入主机名,并保持它非常简单并与可能过时的技术兼容,我想强制主机名以字母字符开头,必须介于 3 到 24 个字符之间,可能包含字母数字字符和/或连字符,并且不得以连字符结尾。

显然,pattern属性就是这里的东西。 问题是到目前为止,我未能提出一个很好的工作示例。 在下面的示例中,它强制执行开始 alpha,如果我输入某些内容,它至少强制执行 3 个字符,但如果我不输入任何内容,它就会接受它为有效。 我也没有完全弄清楚如何将最后一个字符限制为字母数字。

<input type="text" name="hostname"
pattern="^[a-zA-Z][a-zA-Z0-9-]{2,24}$"
title="Enter a hostname, 3-14 characters, beginning
with a letter and containing only alphanumeric
characters and/or a hyphen.  It must end with an
alphanumeric."
>

因此,我想正常工作的一些测试是:

  • A-B (良好(
  • A12 (好(
  • ab-(坏(
  • AB(坏(
  • 1ab(坏(

我有点难以置信,我的谷歌富在这里让我失望了。

如果不输入任何内容,则不会进行验证,因为输入未指定为必需,因此请添加required属性。

此外,由于您希望字段包含 3-24 个字符,因此应{1,22}第一个字符之后的重复项,并且应[a-zA-Zd]最后一个标记以确保最后一个字符不是连字符:

^[a-zA-Z][a-zA-Zd-]{1,22}[a-zA-Zd]$

<form><input type="text" name="hostname" required pattern="^[a-zA-Z][a-zA-Zd-]{1,22}[a-zA-Zd]$" title="Enter a hostname, 3-14 characters, beginning
with a letter and containing only alphanumeric
characters and/or a hyphen.  It must end with an
alphanumeric.">
<button>click</button>
</form>

最新更新