Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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
Java 通配符域验证器_Java_Regex_Validation - Fatal编程技术网

Java 通配符域验证器

Java 通配符域验证器,java,regex,validation,Java,Regex,Validation,我将在我的应用程序中添加对通配符的支持 应满足以下要求。通配符必须包含: - UTF-8 alphabetical characters - .,*,^,+,?,$,[],[^],:,/ - Domain parts other than the last may begin with a digit(from RFCs) 用户还可以将简单域名指定为test.test 其想法是分两步进行: 验证通配符是否与以下模式匹配: ^[\\pL0-9\\[\].^$?*+:/]+。如果匹配,则尝试

我将在我的应用程序中添加对通配符的支持

应满足以下要求。通配符必须包含:

 - UTF-8 alphabetical characters
 - .,*,^,+,?,$,[],[^],:,/
 - Domain parts other than the last may begin with a digit(from RFCs)
用户还可以将简单域名指定为
test.test

其想法是分两步进行:

  • 验证通配符是否与以下模式匹配:


    ^[\\pL0-9\\[\].^$?*+:/]+
    。如果匹配,则尝试编译为java模式

  • 如果它与最后一个正则表达式不匹配,则假设它是简单域名,并使用google library
    com.google.common.net.InternetDomainName验证它
  • 但我不确定最后一种方法是否会涵盖所有可能的情况

    例如,当我这样指定域时:
    test.10
    它与模式匹配,但不符合关于域中数字的第三个要求


    如果您的建议能解释我如何满足所有定义的要求,那就太好了。在这种情况下,最好知道更好的解决方案。

    如果域的最后一部分不应包含任何数字:

    ^(?:[\p{L}\p{Nd}\x2A\x2B\x2F\x3A\x3F\x5B\x5D\x5E]+[\x2E])+[\p{L}\x2A\x2B\x2F\x3A\x3F\x5B\x5D\x5E]+$
    
    上面的正则表达式为Java字符串:

    "^(?:[\\p{L}\\p{Nd}\\x2A\\x2B\\x2F\\x3A\\x3F\\x5B\\x5D\\x5E]+[\\x2E])+[\\p{L}\\x2A\\x2B\\x2F\\x3A\\x3F\\x5B\\x5D\\x5E]+$"
    
    "(?:[\\p{L}\\p{Nd}\\x2A\\x2B\\x2F\\x3A\\x3F\\x5B\\x5D\\x5E]+[\\x2E])+[\\p{L}\\x2A\\x2B\\x2F\\x3A\\x3F\\x5B\\x5D\\x5E][\\p{L}\\p{N}\\x2A\\x2B\\x2F\\x3A\\x3F\\x5B\\x5D\\x5E]+"
    

    如果域最后一部分的第一个字符不应该是数字:

    (?:[\p{L}\p{Nd}\x2A\x2B\x2F\x3A\x3F\x5B\x5D\x5E]+[\x2E])+[\p{L}\x2A\x2B\x2F\x3A\x3F\x5B\x5D\x5E][\p{L}\p{N}\x2A\x2B\x2F\x3A\x3F\x5B\x5D\x5E]+
    
    上面的正则表达式为Java字符串:

    "^(?:[\\p{L}\\p{Nd}\\x2A\\x2B\\x2F\\x3A\\x3F\\x5B\\x5D\\x5E]+[\\x2E])+[\\p{L}\\x2A\\x2B\\x2F\\x3A\\x3F\\x5B\\x5D\\x5E]+$"
    
    "(?:[\\p{L}\\p{Nd}\\x2A\\x2B\\x2F\\x3A\\x3F\\x5B\\x5D\\x5E]+[\\x2E])+[\\p{L}\\x2A\\x2B\\x2F\\x3A\\x3F\\x5B\\x5D\\x5E][\\p{L}\\p{N}\\x2A\\x2B\\x2F\\x3A\\x3F\\x5B\\x5D\\x5E]+"
    

    (^[\\pL0-9\\[\\].^$?*+:/]+\\)?^[\\pL\\[\\].^$?*+:/]+
    感谢您的快速回答。我试过你的口吻了。但不幸的是,它并没有像预期的那样起作用。因此,它与以下被认为与第三个要求有效的域不匹配:10test.com,test.10test.com