HTML5输入模式与非拉丁字母

时间:2013-02-08 08:33:22

标签: html regex html5 internationalization validation

我希望使用新的HTML5模式attirbute对某些输入表单进行预验证。我的数据集是“域名”,因此不应用<input type="url">正则表达式预设。

但是有一个问题,我不会使用A-Za-z,因为该死的IDN(国际化域名)。

所以问题:有没有办法使用<input pattern="">进行随机非英文字母验证?

我尝试了\w of source但它只适用于拉丁语...

也许某人有一组\xNN-\xNN可以保证输入所有unicode字母字符或其他方式?

编辑 “这个问题可能已经有了答案:” - 不,没有答案。

2 个答案:

答案 0 :(得分:3)

根据我的测试,HTML5模式属性支持the exact same way that JavaScript does and does not中的Unicode字符代码点:

  • 它仅支持\u符号表示unicode代码点,因此\u00a1将匹配“¡”。
  • 因为这些定义了字符,所以您可以在[\u00a1-\uffff]
  • 等字符范围内使用它们
  • .也会匹配Unicode字符。

你没有真正指定你想要预验证的方式,所以我不能真正帮助你,但是通过查找unicode字符值,你应该能够在你的正则表达式中找到你需要的东西。 。

请记住,模式正则表达式执行总体上相当愚蠢,并且不受普遍支持。我建议在模式值之上使用一些javascript进行渐进增强(你甚至可以或多或少地重复使用正则表达式)。

与往常一样,永远不要相信用户输入 - 向表单端点发出请求并且或多或少地传递他们喜欢的任何数据都不需要天才。您的服务器端验证必须更明确。您的客户端验证可能更加慷慨,具体取决于误报或漏报是否对您的用例更有问题。

答案 1 :(得分:0)

我知道这不是你想听到的,但是......

HTML5模式属性对于程序员来说并不是真正适合用户。因此,考虑到pattern的不幸限制,你最好提供一种“松散”的模式 - 一种不会给出假阴性但允许一些误报的模式。当我遇到这个问题时,我发现最好的办法是一个由黑名单+几个最低要求组成的模式。希望这可以在你的情况下完成。