如何使用正则表达式验证域名

给定字符串 str,我们的任务是利用正则表达式来检查该字符串是否为有效的域名。一个有效的域名必须满足以下条件:

  • 域名只能包含 a-z、A-Z、0-9 以及连字符 (-)。
  • 域名部分的长度必须在 1 到 63 个字符之间。
  • 域名部分不能以连字符 (-) 开头或结尾(例如 -example.org 或 example.org- 是无效的)。
  • 最后一个顶级域名(TLD)的长度必须至少为 2 个字符,且最多为 6 个字符。
  • 域名可以包含子域名(例如 write.example.org)。

示例:

> 输入: str = "write.example.org"

> 输出: true

> 解释:

> 给定的字符串满足上述所有条件。因此,它是一个有效的域名。

>

> 输入: str = "-example.org"

> 输出: false

> 解释:

> 给定的字符串以连字符 (-) 开头。因此,它不是一个有效的域名。

>

> 输入: str = "example.o"

> 输出: false

> 解释:

> 给定字符串的最后一个 TLD 只有 1 个字符,而最后一个 TLD 的长度必须在 2 到 6 个字符之间。因此,它不是一个有效的域名。

>

> 输入: str = ".org"

> 输出: false

> 解释:

> 给定的字符串不是以 a-z、A-Z 或 0-9 开头。因此,它不是一个有效的域名。

方法: 我们的想法是利用正则表达式来解决这个问题。我们可以按照以下步骤来计算答案:

  • 获取字符串。
  • 创建一个正则表达式来检查有效的域名,如下所示:

> regex = "^((?!-)[A-Za-z0-9-]{1, 63}(?<!-)\\.)+[A-Za-z]{2, 6}$"

  • 其中:
  • ^ 代表字符串的开始。
  • ( 代表组的开始。
  • (?!-) 代表字符串不应以连字符 (-) 开头(负向零宽断言)。
  • [A-Za-z0-9-]{1, 63} 代表域名部分应包含 a-z 或 A-Z 或 0-9 以及连字符 (-),且长度在 1 到 63 个字符之间。
  • (?<!-) 代表字符串不应以连字符 (-) 结尾(反向负向零宽断言)。
  • \. 代表字符串后面跟着一个点。
  • )+ 代表组的结束,该组必须至少出现一次,但允许出现多次以支持子域名。
  • [A-Za-z]{2, 6} 代表 TLD 必须是 A-Z 或 a-z,长度在 2 到 6 个字符之间。
  • $ 代表字符串的结束。
  • 将给定的字符串与正则表达式进行匹配。在 Java 中,我们可以使用 Pattern.matcher() 来实现。
  • 如果字符串与给定的正则表达式匹配,则返回 true,否则返回 false。

下面是上述方法的实现:

C++

#include 
#include 
using namespace std;

// Function to validate the domain name
bool isValidDomain(const string &str)
{
    // Regex to check valid Domain Name
    regex pattern("^[A-Za-z0-9-]{1,63}\\.[A-Za-z]{2,6}$");

    // Return true if the string matches the regex
    return regex_match(str, pattern);
}

// Driver Code
int main()
{
    // Test Case 1:
    string str1 = "example.org";
    cout << (isValidDomain(str1) ? "true" : "false") << endl;

    // Test Case 2:
    string str2 = "contribute.example.org";
    cout << (isValidDomain(str2) ? "true" : "false") << endl;

    // Test Case 3:
    string str3 = "-example.org";
    cout << (isValidDomain(str3) ? "true" : "false") << endl;

    // Test Case 4:
    string str4 = "example.o";
    cout << (isValidDomain(str4) ? "true" : "false") << endl;

    // Test Case 5:
    string str5 = ".org";
    cout << (isValidDomain(str5) ? "true" : "false") << endl;

    return 0;
}

Java

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DomainValidator {

    // Function to validate the domain name
    public static boolean isValidDomain(String str)
    {
        // Regex to check valid Domain Name
        String regex
            = "^[A-Za-z0-9-]{1,63}\\.[A-Za-z]{2,6}$";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(str);

        // Return true if the string matches the regex
        return matcher.matches();
    }

    public static void main(String[] args)
    {
        // Test Case 1:
        String str1 = "example.org";
        System.out.println(
            isValidDomain(str1)); // Expected output: true

        // Test Case 2:
        String str2 = "contribute.example.org";
        System.out.println(
            isValidDomain(str2)); // Expected output: true

        // Test Case 3:
        String str3 = "-example.org";
        System.out.println(
            isValidDomain(str3)); // Expected output: false

        // Test Case 4:
        String str4 = "example.o";
        System.out.println(
            isValidDomain(str4)); // Expected output: false

        // Test Case 5:
        String str5 = ".org";
        System.out.println(
            isValidDomain(str5)); // Expected output: false
    }
}
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/33367.html
点赞
0.00 平均评分 (0% 分数) - 0