How to validate domain name using regex?

This is my code for validating domain name.

function frmValidate() {
    var val = document.frmDomin;
    if (/^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$/.test(val.name.value)) {
    }
    else {
        alert("Enter Valid Domain Name");
        val.name.focus();
        return false;
    }
}

and

<form name="frmDomin" action="" method="post" onsubmit="return frmValidate();">
Domain Name : <input type="text" value="" id="name" name="name"  />
</form>

Now I entered http://devp1.tech.in and it alert the message. I want to enter sub domain also. How to change this? I should not get alert.

Answers:

Answer

Try this:

^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$

Demo

Answer

This is a little on the heavy side:

^(?:(?:(?:[a-zA-z\-]+)\:\/{1,3})?(?:[a-zA-Z0-9])(?:[a-zA-Z0-9-\.]){1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+|\[(?:(?:(?:[a-fA-F0-9]){1,4})(?::(?:[a-fA-F0-9]){1,4}){7}|::1|::)\]|(?:(?:[0-9]{1,3})(?:\.[0-9]{1,3}){3}))(?:\:[0-9]{1,5})?$

Will match:

  • google.com
  • db.my-website.co.us
  • ftp://container-617.databases.online
  • many-ports.com:7777
  • localhost

IPv4

  • 192.168.3.1
  • 127.0.0.1:3306

IPv6 (partial support)

  • [2001:0db8:85a3:0000:0000:8a2e:0370:7334]
  • [2001:db8:85a3:0:0:8a2e:370:7334] (same as previous)
  • [da7a:ba5e:da7a:ba5e:da7a:ba5e:da7a:ba5e]:3306
  • [::1] (localhost loopback)
  • [::] (unspecified address)

But not (IPv6)

  • [2001:db8:85a3::8a2e:370:7334]

This regular expression does not support collapsing consecutive 0-segments into a '::' in IPv6 addresses. (read: don't try this on IPv6 addresses)

Answer

Try this regex:

/([a-z0-9]+\.)*[a-z0-9]+\.[a-z]+/
Answer
<script>
    function frmValidate() {
        var val = document.frmDomin.name.value;
        if (/^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$/.test(val)) {
            alert("Valid Domain Name");
            return true;
        } else {
            alert("Enter Valid Domain Name");
            val.name.focus();
            return false;
        }
    }
</script>

Note : This will not validate Url.

Answer

I'd advise reading up on O'Reilly's guide: https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch08s15.html

Try using https://regex101.com/ to validate the results of your regex.

8.15. Validating Domain Names Problem You want to check whether a string looks like it may be a valid, fully qualified domain name, or find such domain names in longer text.

Solution Check whether a string looks like a valid domain name:

^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$

Regex options: Case insensitive Regex flavors: .NET, Java, JavaScript, PCRE, Perl, Python

\A([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}\Z

Regex options: Case insensitive Regex flavors: .NET, Java, PCRE, Perl, Python, Ruby Find valid domain names in longer text:

\b([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}\b

Regex options: Case insensitive Regex flavors: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby Check whether each part of the domain is not longer than 63 characters:

\b((?=[a-z0-9-]{1,63}\.)[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b

Regex options: Case insensitive Regex flavors: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby Allow internationalized domain names using the punycode notation:

\b((xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}\b

Regex options: Case insensitive Regex flavors: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby Check whether each part of the domain is not longer than 63 characters, and allow internationalized domain names using the punycode notation:

\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b

Regex options: Case insensitive Regex flavors: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby

Discussion A domain name has the form of domain.tld, or subdomain.domain.tld, or any number of additional subdomains. ...

Tags

Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.