我要为我的应用程序添加通配符支持。
应满足以下要求。通配符必须包含:
- UTF-8 alphabetical characters
- .,*,^,+,?,$,[],[^],:,/
- Domain parts other than the last may begin with a digit(from RFCs)
用户也可以指定简单的域名为test.test
我们的想法是分两步完成:
验证通配符是否与下面的模式匹配:
^[\\pL0-9\\[\\].^$?*+:/]+
。如果匹配,则尝试编译为 java 模式。- 如果它与最后一个正则表达式不匹配,则假设它是简单域名并使用谷歌库
com.google.common.net.InternetDomainName
验证它
但我不确定最后一种方法是否涵盖所有可能的情况。
例如,当我这样指定域时:
test.10
与pattern匹配,但不满足域中数字的第三条要求。
如果您的建议能解释我如何才能满足所有定义的要求,那就太好了。在这种情况下,了解更好的解决方案也将是一件好事。
最佳答案
如果域的最后一部分不应包含任何数字:
^(?:[\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]+
上面的正则表达式作为 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{N}\\x2A\\x2B\\x2F\\x3A\\x3F\\x5B\\x5D\\x5E]+"
关于java - 通配符域 validator ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24613503/