Encontré la siguiente expresión regular ( ^(((?+45)?)?)(\s?\d{2}\s?\d{2}\s?\d{2}\s?\d{ 2})$ ) y ( /(?:45\s)?(?:\d{2}\s){3}\d{2}/ ) para validar el número de móvil danés. Sin embargo, no coincide con la siguiente entrada, que también es un número de móvil válido:
4511760574, 004511760574
Un número de móvil solo es válido si el número es uno de los siguientes
a) sus 8 dígitos b) 8 dígitos que comienzan con 45, +45 o 0045 c) Los primeros dos dígitos después de excluir 45, +45 o 0045 deben ser los siguientes según la captura de pantalla (sección marcada con color azul): 
Fuente: https://en.wikipedia.org/wiki/Telephone_numbers_in_Denmark
PD: No estoy 100% seguro si (c) está actualizado. Sin embargo, agradecería mucho una expresión regular que puedo cambiar fácilmente adaptándome si ocurre alguna actualización con (c)
A continuación se muestra el fragmento de código solo relacionado con la pregunta:
****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>¡Por favor ayuda!
Repasemos los requisitos para construir un patrón: el primero y el segundo...
a) sus 8 dígitos
b) O 8 dígitos que comienzan con 45, +45 o 0045
... son bastante directos, y se pueden expresar así:
(?:(?:00|\+)?45)?\d{8} El corazón de esta expresión es la parte \d{8} (lo que significa 8 dígitos). Lo que va antes es la parte 'doble opcional', que significa aproximadamente ' ... precedido opcionalmente por 45 , que a su vez puede ir precedido opcionalmente por 00 o el signo + '. ?: los sigilos se utilizan para evitar que el motor de expresiones regulares capture el contenido de esos grupos de caracteres, lo que hace que un patrón sea un poco más rápido y consuma menos memoria.
Hasta ahora todo bien, pero ¿cómo podemos expresar ese tercer requisito, es decir, que hay un conjunto específico de dígitos al comienzo de la parte \d{8} ? Si bien es posible modificar la 'parte del corazón' para incluir esas cláusulas, existe una alternativa más fácil de mantener: anticipaciones positivas:
(?=2|3[01]|4[012]|4911|5[0-3]|6[01]|[78]1|9[123])Esta parte de un patrón solo se cumple si una posición específica en la cadena marcada va seguida de 2, 30-31, 40-42, 4911, 50-53, 60-61, 71 u 81. , o 91-93, tal como está escrito en esa página wiki. Si algo cambia, será fácil actualizar esa parte sin tocar ninguna otra parte de la expresión regular.
Así que el patrón final se parece a esto:
^(?:(?:00|\+)?45)?(?=2|3[01]|4[012]|4911|5[0-3]|6[01]|[78]1|9[123])\d{8}$Y aquí está la demostración de regex101 , que puede usar para jugar tanto con patrones como con cadenas de muestra.