Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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
用于验证C#和Javascript中FQDN的正则表达式_C#_Javascript_.net_Regex_Fqdn - Fatal编程技术网

用于验证C#和Javascript中FQDN的正则表达式

用于验证C#和Javascript中FQDN的正则表达式,c#,javascript,.net,regex,fqdn,C#,Javascript,.net,Regex,Fqdn,在C#和Javascript中验证FQDN的正确正则表达式是什么? 我一直在到处寻找,我发现不同的规格。哪一个是正确的 我发现了几个例子: 1.(?=^.{1,254}$)(^(?:(?!\d+\.|-)[a-zA-Z0-9_\-]{1,63}(?<!-)\.?)+(?:[a-zA-Z]{2,})$) 2. (?=^.{1,254}$)(^(?:(?!\d|-)[a-zA-Z0-9\-]{1,63}(?<!-)\.?)+(?:[a-zA-Z]{2,})$)

在C#和Javascript中验证FQDN的正确正则表达式是什么? 我一直在到处寻找,我发现不同的规格。哪一个是正确的

我发现了几个例子:

   1.(?=^.{1,254}$)(^(?:(?!\d+\.|-)[a-zA-Z0-9_\-]{1,63}(?<!-)\.?)+(?:[a-zA-Z]{2,})$)

    2. (?=^.{1,254}$)(^(?:(?!\d|-)[a-zA-Z0-9\-]{1,63}(?<!-)\.?)+(?:[a-zA-Z]{2,})$)

    3. \b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b 

   (Regular Expression cook book)
1.(?=^.{1254}$)(^(?:(?!\d+\.|-)[a-zA-Z0-9\-]{1,63}(?)?

请帮助

一般来说,正则表达式食谱是一个很好的信息来源,由两位正则表达式专家编写,因此您应该从这里开始。这里概述的解决方案还没有完全适应您的需要(它不验证整个字符串,但匹配子字符串,并且不检查字符串的总长度),因此我们可以稍微修改它:

/^(?=.{1,254}$)((?=[a-z0-9-]{1,63}\.)(xn--+)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}$/i
说明:


,@Andreas:谢谢你。我看到了这一点。他说:“我对RFC规则的唯一偏差是额外的规则,即顶级域(位于最后一个“.”之后的部分)只能是字符,并且必须是2个或更多的(.com、.net、.org、.eu、.uk等)。但我找不到在哪里有文档记录。”不确定这是否正确。从-TLD请求:ARPA、GOV、EDU、COM、MIL、ORG或英文两个字母的国家/地区代码。因此这似乎是一个有效的扩展/修改。@Anders:我应该在Javascript中使用它做些什么更改。我尝试了以下->var fqdnRegEx=/(?=^.{1254}$)(^(?:(!\d+\.\124;-)[a-zA-Z0-9\-]{1,63}(?@Andreas几年后反思这一点,你的答案似乎已经过时了。这很有效。你能告诉我我可以参考哪些资源来找到FQDN的规则,以便我可以做更多的测试吗?上面的评论中有一些RFC的链接;但是这些文档相当复杂。也许有帮助?xn----dtbjjdcfhg5cckn1k9a.xn--p1ai Try…并获取'false'。在首字母
xn--
之后应允许@tim破折号。如果TLD是punycode,则TLD中可能允许数字。正如上面的用户所说,这是一个真实的主机名。
^                      # Start of string
(?=.{1,254}$)          # Assert length of string: 1-254 characters
(                      # Match the following group (domain name segment):
 (?=[a-z0-9-]{1,63}\.) # Assert length of group: 1-63 characters
 (xn--+)?              # Allow punycode notation (at least two dashes)
 [a-z0-9]+             # Match letters/digits
 (-[a-z0-9]+)*         # optionally followed by dash-separated letters/digits
 \.                    # followed by a dot.
)+                     # Repeat this as needed (at least one match is required)
[a-z]{2,63}            # Match the TLD (at least 2 characters)
$                      # End of string