grangerelixx

grangerelixx

Regex for Domain Name

Hi everyone, this is my first time writing regular expression. I have a regular expression that helps in validating domain names. I think the syntax is wrong here for Elixir. Any help?

~r/^((?!-)[A-Za-z0-9-]{1, 63}(?<!-)\\.)+[A-Za-z]{2, 6}$/

The expected behavior is to match domain names that are in the following format

domain_name.domain_name.extension

or

domain_name.extension

The regular expression should make sure the

  • domain_name can be maximum of 63characters long
  • domain_names can have any letters(can be both lower and upper case), numbers and hyphen.
  • domain_names cannot start or end with hyphen
  • There should be atleast one domain_name.
  • Tld can have any letters(can be both lower and upper case), and numbers in the range of 2 to 6 characters long.
  • All domain_names and tld are separated by period.

Marked As Solved

eksperimental

eksperimental

escape . only once, and remove space inside the curly brackets and it works.

iex> ~r/^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\.)+[A-Za-z]{2,6}$/ |> Regex.match?("domain-name.domain-name.ext")
true

Also Liked

halostatue

halostatue

This is the regex that I was using when I was trying to meaningfully check email addresses. It isn’t complete on the mailbox side (but it’s very good), but it is nearly complete on the domain side (I just noticed an error where the length of the punycode prefix is not considered as part of a part length; it’s not hard to deal with, but will result in two branches for length checking):

  @email_re ~r/
    \A
    (?=
      # Lookahead - the entire address must not exceed 254 characters and
      # must be at least six characters long.
      [-a-z0-9@.!#$%&'*+\/=?^_`{|}~]{6,254}
      \z
    )
    (?=
      # Lookahead - the mailbox part of the address must be between 1..64
      # characters long.
      [-a-z0-9.!#$%&'*+\/=?^_`{|}~]{1,64}
      @
    )
    (?<mailbox>
      # The mailbox part of the address must begin with a printable character.
      [a-z0-9!#$%&'*+\/=?^_`{|}~-]+
      # The mailbox part of the address may contain periods, but must not
      # contain multiple periods in a row.
      (?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*
    )
    # The mailbox part is separated from the domain part with a literal.
    @
    (?<domain>
      # The domain part must have at least one non-TLD part. Practically, for
      # SMTP, there is a maximum of 125 non-TLD parts -- subdomains, domain,
      # and TLD.
      (?:
        # The domain part may not start with a dash.
        (?!-)
        # The domain part may start with xn-- for punycode encoding.
        (xn--)?
        # The domain part must have at least one alphanumeric.
        [a-z0-9]
        # The domain part may have 0-62 alphanumeric or dash
        # characters.
        [-a-z0-9]{0,62}
        # The domain part may not end with a dash
        (?<![-])
        # Each hostname label in the domain part terminates with a period literal.
        \.
      ){1,}
      # The TLD may not start with a dash.
      (?!-)
      # The TLD may start with xn-- for punycode
      (xn--)?
      # The TLD starts with an alphanumeric.
      [a-z0-9]
      # The TLD may have 1..62 alphanumeric or dash characters.
      [-a-z0-9]{1,62}  # May have 0–61 alphanumeric, dash, or underscore
      # The TLD may not end with a dash or underscore.
      (?<!-)
    )
    \z
    /ix
grangerelixx

grangerelixx

Thanks a lot! Works now :smiley:

Where Next?

Popular in Questions Top

joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 record...
New
Werner
Hi, I’m using Ubuntu 18.04 and after updating to OTP-24.0 yesterday i have this warning when I run “mix local.hex”: 14:57:30.512 [warn] ...
New
quazar
How to set Jason to encode all fields in ecto schema, I don’t care about security and implementing only is taking long list of attributes...
New
mgjohns61585
Could someone help me? I'm making my first elixir program, number guessing game. I can't figure out how to convert the user's guess from ...
New
makeitrein
Hey all, just started picking up Elixir last week and am writing a scraper as a learning project. Baby step #1 is extracting the number ...
New
minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
ovidiubadita
Hey all, I discovered Elixir and I love it. I always wanted to learn a functional programming and I intended to go for Haskell, but afte...
New
kostonstyle
Hi all I want to have a unix time, from the current time plus 1 hour. DateTime.now + 1 hour How to get it in elixir? Thanks
New
Exadra37
Sometimes I want to check if the input into a function is not a blank string. My first approach: defmodule Example do def do_stuff(s...
New

Other popular topics Top

Brian
What is the proper way to load a module from a file in to IEX? In the python world, doing something like this pretty standard: from ....
New
sorentwo
Hello! tl;dr Announcing Oban, an Ecto based job processing library with a focus on reliability and historical observability. After spen...
977 41022 311
New
sergio
In Ruby, I can go: User.find_by(email: "foobar@email.com").update(email: "hello@email.com") How can I do something similar in Elixir? ...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
Jim
As a follow up to my earlier question: I have the code compiling and running but not getting a successful login from the rest server. ...
New
lastday4you
I wanted to check elixir version in phoenix because i found that my elixir is 1.5 but when i use Enum.chunk_by it said the function is un...
New
fireproofsocks
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? https://hexdocs.pm/ecto/Ecto.Repo.h...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID&lt;0.412.0&gt; terminating ** (Postgrex.Error) FATAL...
New
magnetic
Hey :wave:t3: Elixir community, I’ve been learning Elixir, and working on some side projects. My editor of choice is VSCode, and althoug...
New

We're in Beta

About us Mission Statement