2010-08-31 13 views
6

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" 
+0

¿Pueden los números ser arbitrariamente grandes? – phimuemue

+2

¿Es "ciento cuarenta y seis" un número? Dos números? ¿Tres? ¿Las cuatro? –

+0

solo números únicos cero hasta nueve –

Respuesta

2
/(?:(?:^|\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.

+0

gracias, ¿esto manejará los espacios entre las palabras? –

+0

@ Sherif, sí. Tenga en cuenta que tendrá que poner la expresión regular en una cadena ('" /.../ "'), y es probable que necesite escapar de '\ s' (=>' \\ s'). – James

+1

Los números permitidos son de cero a nueve pero no a diez – Toto

4

Puede hacerlo de esta manera:

\b(?:(?:zero|one|two|three|four|five|six|seven|eight|nine)(?: +|$)){4} 

(Rubular)

0
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.

+2

¿No le faltan espacios entre las palabras? – Kobi

3

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

+1 Me gusta bastante este enfoque. Aquí hay un enlace de Rubular: http://rubular.com/r/Fm4dGwkNGg ... Sin embargo, se olvidó de cero. –

+0

@Mark - Gracias. Lo probé allí también, simplemente olvidé el enlace. Tengo cero, pero no está ordenado ':)' – Kobi

+0

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. :) –

Cuestiones relacionadas