regex - probar - expresiones regulares jquery
Necesita un simple RegEx para encontrar un nĂºmero en una sola palabra (6)
Éste abordaría su problema específico. Esta expresión
///page//(0*[1-9][0-9]*)/ or "Perl-compatible" ///page//(0*[1-9]/d*)/
debería capturar cualquier número distinto de cero, incluso 0 lleno. Y porque ni siquiera busca una señal, -
después de que la barra no se ajusta al patrón.
El problema que tengo con la expresión de falta de claridad es que, probablemente, todavía no tenga el número aislado para que ^
y $
funcionen. Tendrás que hacer un trabajo para aislarlo . Pero una solución general no sería suponer que el número es todo lo que contiene una cadena, como se muestra a continuación.
/(^|[^0-9-])(0*[1-9][0-9]*)([^0-9]|$)/
Y los dos grupos de cola, podría reemplazarlos con marcas de límite de palabra ( /b
), si el lenguaje RE los tuviera. De lo contrario, los incluiría en grupos que no capturarían, si el lenguaje los tuviera, o incluso en versiones alternativas si los tuviera, pero es más probable que tengan límites de palabras antes de las revisiones.
Versión completa compatible con Perl :
/(?<![/d-])(0*[1-9]/d*)/b/
Elegí un aspecto negativo detrás de un límite de palabras, porque ''-'' no es un carácter de palabra, por lo que -1 tendrá un "límite de palabras" entre ''-'' y ''1''. Y un aspecto negativo detrás coincidirá con el comienzo de la cadena; simplemente no puede haber un dígito o ''-'' al frente.
Se podría decir que la suposición de ancho cero ^
es solo uno de los casos que satisface la suposición de ancho cero (?<![/d-])
.
Tengo la siguiente ruta de url y quiero asegurarme de que un segmento de la ruta solo acepte números. como tal, puedo proporcionar algunos regex que comprueben la palabra.
/ page / {currentPage}
así que ... ¿alguien me puede dar una expresión regular que coincida cuando la palabra es un número (cualquier int) mayor que 0 (es decir, 1 <-> int.max).
Esto coincidirá con cualquier cadena de manera que, si contiene /page/
, debe ir seguida de un número, que no consta de solo ceros.
^(?!.*?/page/([0-9]*[^0-9/]|0*/))
(?! )
es una mirada negativa hacia adelante. Coincidirá con una cadena vacía, solo si el patrón contenido no coincide desde la posición actual.
Mientras que la expresión regular de Jeremy no es perfecta (debe probarse en contexto, contra personajes principales y demás), su consejo es bueno: buscar una expresión regular genérica y simple (por ejemplo, si debes usarla en mod_rewrite de Apache) pero de ninguna manera, maneje la redirección final en el código del servidor (si puede) y haga una verificación real de la validez del parámetro allí.
De lo contrario, mejoraría la expresión de Jeremy con límites: //b([1-9][0-9]*)$/
Por supuesto, una expresión regular no puede proporcionar una comprobación contra cualquier int máximo, en el mejor de los casos puede controlar el número de dígitos: //b([1-9][0-9]{0,2})$/
por ejemplo.
Si lo quiere mayor que 0, use esta expresión regular:
/([1-9][0-9]*)/
Esto funcionará siempre que el número no tenga ceros a la izquierda (como ''03'').
Sin embargo, recomiendo simplemente usar un simple [0-9]+
regex y validar el número en su código de sitio real.
string testString = @"/page/100";
string pageNumber = Regex.Match(testString, "/page/([1-9][0-9]*)").Groups[1].Value;
Si no coincide, pageNumber será ""
/^[1-9][0-9]*$/
Problemas con otras respuestas:
/([1-9][0-9]*)/ // Will match -1 and foo1bar
#[1-9]+# // Will not match 10, same problems as the first
[1-9] // Will only match one digit, same problems as first