2017-09-25 62 views
1

我有一个可选的表单字段,我想使用新的html5模式选项。 但是,当我添加模式时,即使我没有必需的属性,字段也是必需的。我已经包含了下面的模式。我希望用户能够将字段留空,但如果用户在字段中输入了某些内容,那么我希望应用该模式。我怎么做到这一点?提前致谢。html5表单验证 - 在可选字段上使用模式

pattern="[-a-zA-Z '.,]{3,50}" 

回答

1

的问题是,{3,50}限制性量词至少需要3次出现在字符类中定义的字符的。

您需要使模式可选。与可选的非捕获组包裹它:

pattern="(?:[-a-zA-Z '.,]{3,50})?" 
     ^^^     ^^ 

HTML5 patterns自动卷绕有锚固件,即,图案上方将被翻译成^(?:(?:[-a-zA-Z '.,]{3,50})?)$和将匹配

  • ^(?: - 字符串
  • 的开始
  • (?:[-a-zA-Z '.,]{3,50})? - 发生1或0次3至50个连字符,ASCII字母,空格,',.,
  • )$ - 字符串结尾。
+0

令人惊叹。谢谢。你是HTML5天才。我通过删除前面的“:”来简化它。而我在上面的模式中没有看到字符串的结尾。简化版本工作。是否有一个原因,我需要一个字符串的开始和字符串的结尾? –

+0

@XiVix:查看[文档](https://www.w3.org/TR/html5/single-page.html#the-pattern-attribute)。你在'pattern'属性*中使用的模式必须匹配整个字符串,因此前导/尾随位置中的'^'和'$'不是必需的。这就是为什么我没有把它们纳入模式。 –