Estoy usando una expresión regular /^(\+88)?01[3-9]\d{8}$/
let phoneNum = "+880136486336" let validRegex = /^(\+88)?01[3-9]\d{8}$/; console.log(validRegex.test(phoneNum));para que coincida con un patrón que coincida con algunas cadenas como
+8801712345678 01712345678 01312349876 Funciona bien, pero también quiero hacer coincidir 01[n] donde n será 3-9 . patrón para averiguar el operador de red móvil.
quiero hacer algo como esto
si el número es 01712345678 , imprima "Operador de red A",
si el número es +8801712345678 , imprima "Operador de red A"
si el número es 01312349678 , imprima "Operador de red B"
y diferentes operadores para diferentes valores de
n.aquí
017, 013, 014, 016, 015, 019, 018son códigos de operador móvil que quiero usar para encontrar el operador según el número de móvil.
No encuentro ninguna forma de hacerlo. ¿Cómo puedo hacerlo con expresiones regulares?
Puede capturar los tres dígitos al principio con un grupo de captura, luego usar String#match o RegExp#exec para obtener la coincidencia real y luego, si hay una coincidencia, obtener el valor del grupo y obtener el nombre del operador de un diccionario:
const phones = ['+8801712345678','01712345678','01312349876']; const operators = {'017' : 'Operator A', '013' : 'Operator C', '014' : 'Operator B', '016' : 'Operator D', '015' : 'Operator E', '019' : 'Operator F', '018' : 'Operator G'}; const validRegex = /^(?:\+88)?(01[3-9])\d{8}$/; for (const phone of phones) { const match = validRegex.exec(phone); if (match) { console.log(phone, "=> Valid, belongs to", operators[match[1]]) } else { console.log(phone,"=> NO MATCH"); } }Aquí,
^(?:\+88)?(01[3-9])\d{8}$ : el primer grupo opcional ahora no captura y ahora hay un grupo de captura con ID = 1, (01[3-9])validRegex.exec(phone) obtiene el objeto de coincidenciaoperators[match[1]] devuelve el nombre del operador por clave.