Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Go中验证国际域名的最佳方法_Go - Fatal编程技术网

在Go中验证国际域名的最佳方法

在Go中验证国际域名的最佳方法,go,Go,在Go中验证国际域名的最佳方法是什么 可能是复制这个不是从网络包导出的函数 我们需要验证像icaan.org和example这样的域。(特殊字符) 编辑:IDN 已经在使用govalidator,它无法验证IDN,因为它不处理unicode字符 下面是一些IDN的例子 -阿拉伯语 -中文(简体) -中文(繁体) -希腊语 ाहरण.परीक्षा 印地语 -日语 -韩语 -波斯语 -俄语 刚刚看到对punycode的引用 虽然所有这些punycode都在公共后缀列表中 :(一种可能的方

在Go中验证国际域名的最佳方法是什么

可能是复制这个不是从网络包导出的函数

我们需要验证像icaan.org和example这样的域。(特殊字符)

编辑:IDN

已经在使用govalidator,它无法验证IDN,因为它不处理unicode字符

下面是一些IDN的例子

  • -阿拉伯语
  • -中文(简体)
  • -中文(繁体)
  • -希腊语
  • ाहरण.परीक्षा 印地语
  • -日语
  • -韩语
  • -波斯语
  • -俄语
刚刚看到对punycode的引用

虽然所有这些punycode都在公共后缀列表中


:(

一种可能的方法是使用内置函数和正则表达式来匹配由点分隔的Unicode字母/数字/标记序列(如示例数据集中所示)

例如:

var domainNamePattern = regexp.MustCompile(`^([\p{L}\p{M}\p{N}_%+-]+\.)+[\p{L}\p{M}\p{N}]+$`)

func main() {
  ss := []string{
    `https://evertpot.com/internationalized-domain-names-are-you-ready/`,
    `http://bogus!.com`,
    `https://foo1.bar2.com.gah.zip/`,
    `http://مثال.إختبار`,
    `http://例子.测试`,
    `http://例子.測試`,
    `http://παράδειγμα.δοκιμή`,
    `http://उदाहरण.परीक्षा`,
    `http://例え.テスト`,
    `http://실례.테스트`,
    `http://مثال.آزمایشی`,
    `http://пример.испытание`,
  }

  for _, s := range ss {
    u, err := url.Parse(s)
    if err != nil || !domainNamePattern.MatchString(u.Hostname()) {
      bogusPart := s
      if err == nil {
        bogusPart = u.Hostname()
      }
      fmt.Printf("ERROR: invalid URL or hostname %q\n", bogusPart)
      continue
    }
    fmt.Printf("OK: hostname=%q\n", u.Hostname())
  }
}

// OK: hostname="evertpot.com"
// ERROR: invalid URL or hostname "bogus!.com"
// OK: hostname="foo1.bar2.com.gah.zip"
// OK: hostname="مثال.إختبار"
// OK: hostname="例子.测试"
// OK: hostname="例子.測試"
// OK: hostname="παράδειγμα.δοκιμή"
// OK: hostname="उदाहरण.परीक्षा"
// OK: hostname="例え.テスト"
// OK: hostname="실례.테스트"
// OK: hostname="مثال.آزمایشی"
// OK: hostname="пример.испытание"

当然,应该更加小心地构建正则表达式,使其符合任何相关规范,但这个示例应该是一个很好的起点。

什么是“验证国际域名”?您只是想知道它的格式是否正确,或者它是否存在于DNS中?格式是否正确,没有非法字符或只是行话。IDN>您必须将其转换为govalidator的punycode。