que necesito código PHP para detectar si una cadena contiene 4 o más números consecutivos escrito (0 a 9), como:expresión regular para detectar números escritos como palabras
o
"zero eight nine nine seven three six six"
que necesito código PHP para detectar si una cadena contiene 4 o más números consecutivos escrito (0 a 9), como:expresión regular para detectar números escritos como palabras
o
"zero eight nine nine seven three six six"
/(?:(?:^|\s)(?:one|two|three|four|five|six|seven|eight|nine|ten)(?=\s|$)){4,}/
código
PHP:
if (preg_match(...put regex here..., $stringToTestAgainst)) {
// ...
}
Nota: Más WOR ds (p. 'doce') se puede agregar fácilmente a la expresión regular.
Puede hacerlo de esta manera:
\b(?:(?:zero|one|two|three|four|five|six|seven|eight|nine)(?: +|$)){4}
if (preg_match("/(?:\b(?:(one)|(two)|(three)|(four)|(five)|(six)|(seven)|(eight)|(nine))\b\s*?){4,}/", $variable_to_test_against, $matches)) {
echo "Match was found <br />";
echo $matches[0];
}
EDIT:
espacio Agregado (s) en la expresión regular - gracias a Kobi.
¿No le faltan espacios entre las palabras? – Kobi
Otra opción es:
\b(?:(?:one|two|three|four|five|six|seven|eight|nine|zero)\b\s*?){4}
Eso es más o menos lo mismo que el resto. El único bit interesante es la parte \s*?
- que relacionará perezosamente los espacios entre las palabras, por lo que no terminará con espacios adicionales después de la secuencia de 4 palabras. El \b
antes de asegurar que hay al menos un espacio (u otro separador después de la última palabra, para que coincida !a b c d!
)
+1 Me gusta bastante este enfoque. Aquí hay un enlace de Rubular: http://rubular.com/r/Fm4dGwkNGg ... Sin embargo, se olvidó de cero. –
@Mark - Gracias. Lo probé allí también, simplemente olvidé el enlace. Tengo cero, pero no está ordenado ':)' – Kobi
Oh sí, está ordenado en orden de teclado. Debería haber notado que cero es uno de los ejemplos en el enlace rubular. Lo siento. :) –
¿Pueden los números ser arbitrariamente grandes? – phimuemue
¿Es "ciento cuarenta y seis" un número? Dos números? ¿Tres? ¿Las cuatro? –
solo números únicos cero hasta nueve –