Estoy tratando de validar el texto con javascript, pero puedo averiguar por qué no funciona.
He estado usando: https://regex101.com/ para probar dónde funciona pero en mi script falla
var check = "test" var pattern = new RegExp('^(?!\.)[a-zA-Z0-9._-]+$(?<!\.)','gmi'); if (!pattern.test(check)) validate_check = false;else validate_check = true;Lo que estoy buscando es el primer y último carácter, no un punto, y la cadena puede contener [a-zA-Z0-9._-]
Pero la verificación anterior siempre falla incluso en la palabra: prueba
+$(?<!\.) no es válido en su RegEx
$ coincidirá con el final del texto o la línea (con la bandera m )(?<!Y)X coincidirá con X , pero solo si Y no está antesAlgunas notas sobre el patrón:
^(?!.)[a-zA-Z0-9._-]+$(?<!.) y la primera búsqueda negativa hará que el patrón falle si hay un carácter que no sea una nueva línea a la derecha, por eso no coincide con test/i para una coincidencia que no distingue entre mayúsculas y minúsculas, puede acortar [A-Za-z] a solo uno de los rangos como [az] o usar \w para hacer coincidir un carácter de palabra como en su clase de carácter(?<!\.) que usa un lookbehind negativo no es inválida en su patrón, pero no siempre es compatiblePara sus requisitos, no tiene que usar miradas. Si también desea permitir un solo carácter, puede usar:
^[\w-]+(?:[\w.-]*[\w-])?$^ Comienzo de cadena[\w-]+ Coincide con 1+ ocurrencias de un carácter de palabra o -(?: grupo de no captura[\w.-]*[\w-] Coincide con caracteres de palabra opcionales, un punto o guión)? Cierre el grupo de no captura y hágalo opcional$ Fin de la cadenaDemostración de expresiones regulares
const regex = /^[\w-]+(?:[\w.-]*[\w-])?$/; ["test", "abc....abc", "a", ".test", "test."] .forEach((s) => console.log(`${s} --> ${regex.test(s)}`) );¿Qué pasa con RegEx más simple?
var checks = ["test", "1-t.e_s.t0", ".test", "test.", ".test."]; checks.forEach(check => { var pattern = new RegExp('^[^.][a-zA-Z0-9\._-]+[^.]$','gmi'); console.log(check, pattern.test(check)) });Su código debería verse así:
var check = "test"; var pattern = new RegExp('^[^.][a-zA-Z0-9\._-]+[^.]$','gmi'); var validate_check = pattern.test(check); console.log(validate_check);