【问题标题】:Wildcard domain validator通配符域验证器
【发布时间】:2014-08-28 02:34:33
【问题描述】:

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

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

 - UTF-8 alphabetical characters
 - .,*,^,+,?,$,[],[^],:,/
 - Domain parts other than the last may begin with a digit(from RFCs)

用户也可以指定简单的域名为test.test

我们的想法是分两步完成:

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

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

  2. 如果它与最后一个正则表达式不匹配,则假定它是简单域名并使用谷歌库com.google.common.net.InternetDomainName 对其进行验证

但我不确定最后一种方法是否会涵盖所有可能的情况

例如,当我这样指定域时: test.10 匹配pattern,但不满足域中数字的第三条要求。

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

【问题讨论】:

  • (^[\\pL0-9\\[\\].^$?*+:/]+\\.)?^[\\pL\\[\\].^$?*+:/]+
  • 感谢您的快速回答。我试过你的模式。但不幸的是,它没有按预期工作。所以它不匹配以下被认为有效的域与第三个要求:10test.com,test.10test.com

标签: java regex validation


【解决方案1】:

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

^(?:[\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]+"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 2016-01-26
    • 2017-04-30
    • 1970-01-01
    • 2020-10-08
    • 2017-12-14
    • 1970-01-01
    相关资源
    最近更新 更多