java - Coldfusion 和 Java 如何验证 punycode IDN

标签 java regex validation coldfusion idn

最近我重建了一些表格,以便他们接受国际域名,例如

http://例子.测试

然后我会将它们存储为 punycode。在此之前,我们使用 Coldfusions isValid() 运行验证代码来检查域是否有效。方法:

if(not isValid("url", sURL)){
return false;
}

对于 punycode,我们遇到了 isValid() 的问题。当域如下时函数失败:

http://例子.测

或者当使用 CreateObject( "java", "java.net.IDN" ).toASCII(sURL); 转换为 punycode 时在某些情况下,结果如下:

xn--http://133ab--xn328sdf

(编造的示例,但在某些情况下,http://部分之前会有字符)

目前是否有一种方法可以使用 Java 库或 Coldfusion 库或正则表达式来验证 IDN 和“正常”域?

最佳答案

IDN 仅代表域名,您似乎在要转换的字符串中包含协议(protocol) (http://)。

首先使用简单的replace() 或使用java.net.URL 删除协议(protocol),然后根据需要重新组合协议(protocol)和idn。

<cfscript>
oUrl = createobject("java", "java.net.URL").init("httP://例子.测试");
protocol = oUrl.getProtocol();
domain = oUrl.getHost();
idn = createobject("java", "java.net.IDN").toAscii(domain);
writeDump(protocol);  // -> http
writeDump(domain);    // -> 例子.测试
writeDump(idn);       // -> xn--fsqu00a.xn--0zwm56d
</cfscript>

一旦你有了 punycode,你就应该能够对其使用 isValid() 了。

关于java - Coldfusion 和 Java 如何验证 punycode IDN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10548523/

相关文章:

javascript - Rails 正则表达式不起作用,但 Javascript 正则表达式可以

php - 自然语言处理的正则表达式 "does not contain"模式问题

c# - 如何获取带有参数的本地化属性错误消息?

Java Bufferedimage setRgb getRgb,2个不同的结果

java - 是否可以禁用所有物理电话按钮?

css - 在CSS中使用正则表达式匹配数字

php - 回车在 javascript-php 上下文中的意义是什么?

java - 在 Java 中创建对象数组时遇到问题

Java:如何在 Unicode Normal Form C 中创建一个字符串

javascript - PHP表单验证最小字符需要避免空格吗?