test - regexp javascript
Javascript regex O | (5)
Ambas reglas llegaron a una:
^/d{1,5}$|^/d{0,5}/./d{1,4}$
Actualmente estoy buscando cómo escribir correctamente una expresión regular para esta aplicación:
1 - Un número sin "." con una longitud de 1 a 5 dígitos => /^(/d{1,5})$/
2 - Un número con "." con una longitud de 1 a 5 dígitos antes del "." y de 1 a 4 dígitos después del "." o un número que comienza con "." con una longitud de 1 a 4 dígitos después del "." => /^(/d{1,5})?/.?(/d{1,4})?$/
Intenté usar un operador o "|", pero no funciona; (=> /^(/d{1,5})?/.?(/d{1,4})?$|^(/d{1,5})$/
No entiendo por qué, es mi primer regex de script java y no estoy seguro de usar bien el operador "|".
Siguiendo las respuestas que me gustaría obtener con 1 expresión regular:
123 => ok
12345 => ok
123456 => not ok
12345.2156 => ok
123456.12 => not ok
12345.12345 => not ok
Muchas gracias por su ayuda. Que tengas un buen día.
Etienne
Mejor uso con Array#split
. Da el mismo resultado que lo que se espera del patrón regex.
function check(a){
var c= a.toString().split(".");
return c[1]? ((c[0].length <= 5) && (c[1].length <= 4)) ? true : false : c[0].length <= 5 ? true : false;
}
console.log(check(123))
console.log(check(12345))
console.log(check(123456))
console.log(check(12345.2156))
console.log(check(123456.12))
console.log(check(12345.12345))
Para usar el operador o si desea capturar el valor que coincida, debe ajustar la expresión regular entre paréntesis /(...)/
y dividir el registro con un /(...|...)/
.
const checkNum = s => console.log(s, /^(/d{1,5}|/d{1,5}/./d{4})*$/.test(s))
checkNum(''55555.4444'')
checkNum(''88888'')
checkNum(''88888.22'')
Puede verificar la segunda parte como opcional.
function check(v) {
return /^(?=.)/d{0,5}(/./d{1,4})?$/.test(v);
}
console.log(['''', ''.123'', 123, 12345, 12345.2156, 123456, 123456.12, 12345.12345].map(check));
^(/d{1,5}|/d{1,5}/./d{1,4}|/./d{1,4})$
con un doble | funciona bien aquí https://regex101.com/r/jTVW2Z/1