7

我想用新的 HTML5 模式属性对一些输入表单进行预验证。我的数据集是“域名”,因此<input type="url">未应用正则表达式预设。

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

所以问题:有什么方法可以<input pattern="">用于随机非英文字母验证?

我试过\w了,但它只适用于拉丁语......

也许有人有一组\xNN-\xNN保证输入所有 unicode 字母字符的集合,或者其他方式?

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

4

2 回答 2

3

根据我的测试,HTML5 模式属性支持 Unicode 字符代码点的方式与 JavaScript 支持和不支持的方式完全相同

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

您并没有真正指定您希望如何进行预验证,所以我真的无法为您提供更多帮助,但是通过查找 unicode 字符值,您应该能够在您的正则表达式中找出您需要的内容。

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

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

于 2014-08-02T02:57:06.953 回答
0

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

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

于 2013-08-20T02:13:36.010 回答