【问题标题】:Check for valid domain name in a string?检查字符串中的有效域名?
【发布时间】:2017-12-14 02:45:39
【问题描述】:

我正在使用 python 并且想要一个简单的正则表达式来检查域名的有效性。我检查至少写域名。

url = 'https://stackoverflow'
        keyword = 'foo'
        with self.assertRaises(ValueError):
            check_keyword(url, keyword)

我尝试在 url 文本字段上进行单元测试,并在 main.py 页面中完成了验证 main.py-

def check_keyword(url, 关键字):

if re.match("^(((([A-Za-z0-9]+){1,63}\.)|(([A-Za-z0-9]+(\-)+[A-Za-z0-9]+){1,63}\.))+){1,255}$" ,url):
   return ValueError("Invalid")

例子

【问题讨论】:

标签: python regex string dns


【解决方案1】:

validators module 中的source 表明,这可能是一个更复杂的任务。

你可以使用那个模块:

>>> import validators
>>> validators.domain('example.com')
True

>>> validators.domain('example.com/')
ValidationFailure(func=domain, ...)

或者您可以使用Domain names 的 RFC 来构建您自己的检查器。

【讨论】:

  • 我使用的是同一个模块,它使用的正则表达式看起来很奇怪。此外,它将此域视为有效:“a.aa*com”,我认为它不应该是,特别是因为它有一个星号作为其中的一部分。
  • validators.domain("example.com") 无法检查子域。因此,它也会为 validators.domain("abc.example.com") 返回 True。
  • 验证器包将带有underscorestrailing dots 的域标记为无效。
【解决方案2】:

试试这个:

# Check if a string is a url
    from django.core.validators import URLValidator
    import requests

    try:
        validate = URLValidator()
        validate(url)
        print("String is a valid URL")
    except:
        print("String is not valid URL")
        raise serializers.ValidationError("String is not valid URL")
    
    # Check if the url exists on the internet
    try:
        response = requests.get(url)
        print("URL is valid and exists on the internet")
    except requests.ConnectionError as exception:
        print("URL does not exist on Internet")
        raise serializers.ValidationError(f'URL {url} does not exist on Internet')

更新:我通过使用 python-whois 库找到了更好的解决方案 这里valid domain name by whois

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多