【问题标题】:Python domain name check using regex使用正则表达式检查 Python 域名
【发布时间】:2011-12-11 21:31:03
【问题描述】:

我希望为域名设置用户输入检查。我在 stackoverflow Check for a valid domain name in a string? 上找到了以下内容,答案是:r'[a-zA-Z\d-]{,63}(.[a-zA-Z\d-]{,63})*' 似乎满足我的需求(在概念上),但是当我使用 re.match 和大于 63 个字符的字符串对其进行测试时,它仍然返回“true”。

当我使用 group() 测试结果时,它返回前 63 个字符,这是有道理的。基于此,有人可以告诉我我做错了什么吗? Match 是在这种情况下使用的正确操作,还是我需要做其他事情才能正确测试字符串?

谢谢。

【问题讨论】:

  • 哇,这是一个用于匹配域的可怕正则表达式。它会从字面上匹配这句话中的任何单词。不要使用那个正则表达式,它毫无价值。
  • 你在使用匹配吗?还是其他方法之一?您错过了您提到的问题中的一个重要细节:点前必须有一个 \。一个简单的点表示“任何字符”,前面带有反斜杠的点表示“一个点”。因此正确的表达式是r'[a-zA-Z\d-]{,63}(\.[a-zA-Z\d-]{,63})*'。也许这已经回答了你的问题。否则,请发布一些代码来澄清您的问题。
  • @frankp 很好,谢谢。 Typo 一定很喜欢他们。

标签: python regex


【解决方案1】:

您应该根据您的输入锚定它并确保“。”真的匹配句号。

r'^[a-zA-Z\d-]{,63}(\.[a-zA-Z\d-]{,63})*$'

【讨论】:

  • 我稍微修改了一下:r'^[a-zA-Z\d-]{,63}(\.[a-zA-Z\d-]{,63}).$'(注意最后的点(.)而不是星号(*))。这会强制测试以 .xxx 结尾。还允许使用尾随点 (.) 在技术上正确的域。
【解决方案2】:

你可以试试这个:

^[a-z0-9]([a-z0-9-]+\.){1,}[a-z0-9]+\Z

例子:

  • w3.example.com [匹配]
  • example.com [匹配]
  • w3.site-example.com [匹配]
  • -w3.example.com [不匹配]​​
  • example.buzz [匹配]
  • .com [不匹配]​​
  • EXAMPLE.com [不匹配]​​

【讨论】:

    猜你喜欢
    • 2011-02-07
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多