Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

144
Views
Correct RegEx for danish mobile number

I have found the following regex ( ^(((?+45)?)?)(\s?\d{2}\s?\d{2}\s?\d{2}\s?\d{2})$ ) and ( /(?:45\s)?(?:\d{2}\s){3}\d{2}/ ) to validate danish mobile number. However it mismatches the following input which are also valid mobile number:

4511760574, 004511760574

A mobile number is only valid if the number is one of the following

a) its either 8 digits b) 8 digits starting with either 45, +45 or 0045 c) First two digits after excluding either 45, +45 or 0045 should be the following as per screenshot (section marked with blue color):

Source: https://en.wikipedia.org/wiki/Telephone_numbers_in_Denmark

PS: I am not 100% confident if (c) is up to date. However a regex would be really appreciated which I can change easily by adapting if any update happens with (c)

Below are the code snippet only related to the question:

****HTML****
<input type="text" class="form-control num-only-with-plus rounded-0" id="phone"
                            placeholder="Telefonnummer" required maxlength="12">
<div id="phone-number-feedback" class="invalid-feedback">Invalid Number</div>

****JS****
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"
    integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ=="
    crossorigin="anonymous"></script>

<script type="text/javascript">

function validateMobileNumber(phone) {
        const pattern = /(?:45\s)?(?:\d{2}\s){3}\d{2}/g;
        return pattern.test(String(phone).toLowerCase());
    }

//Allow only digit and '+' sign on the input field
$('.num-only-with-plus').keypress(function (e) {
    if (e.key != '+' && e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
            return false;
        }
$('#phone').keyup(_.debounce(function () {
            const phone = $(this)
            if (validateMobileNumber(phone.val())) {
                phone.toggleValid()
                $('#submit_btn').prop('disabled', false)                
            } else {
                phone.toggleInvalid();
                $('#phone-number-feedback').text("Tjek venligst mobilnummeret igen. Er det okay?")
                $('#submit_btn').prop('disabled', true)
            }
        }, 500));
</script>


Please help!

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Let's go through the requirements to build up a pattern: first and second ones...

a) its either 8 digits

b) OR 8 digits starting with either 45, +45 or 0045

... are rather direct, and can be expressed like this:

(?:(?:00|\+)?45)?\d{8}

The heart of this expression is \d{8} part (meaning 8 digits). What goes before it is 'double-optional' part, meaning roughly '...optionally preceded by 45, which itself can be optionally preceded by either 00 or + sign'. ?: sigils are used to prevent regex engine to capture the content of those character groups, making a pattern a little bit faster and less memory-consuming.

So far, so good, but how can we express that third requirement, meaning there's a specific set of digits at the beginning of \d{8} part? While it's possible to modify the 'heart part' to include those clauses, there's a more maintainable alternative - positive lookaheads:

(?=2|3[01]|4[012]|4911|5[0-3]|6[01]|[78]1|9[123])

This part of a pattern is only satisfied if a specific position in the checked string is followed either by 2, or 30-31, or 40-42, or 4911, or 50-53, or 60-61, or 71, or 81, or 91-93 - just as written in that wiki page. If anything changes, it'll be easy to update that part without touching any other part of regex.

So the final pattern looks something like this:

^(?:(?:00|\+)?45)?(?=2|3[01]|4[012]|4911|5[0-3]|6[01]|[78]1|9[123])\d{8}$

And here's regex101 demo, which you can use to play with both pattern and sample strings.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!