2010-08-31 5 views
6

I PHP Code benötigen zu erkennen, ob eine Zeichenfolge enthält 4 oder mehr aufeinanderfolgende geschrieben Ziffern (0 bis 9), wie:regulärer Ausdruck Nummern zu erfassen, wie Worte geschrieben

oder

"zero eight nine nine seven three six six" 
+0

Können die Zahlen beliebig groß sein? – phimuemue

+2

Ist "einhundertvierundvierzig" eine Zahl? Zwei Zahlen? Drei? Vier? –

+0

nur einzelne Zahlen null bis neun –

Antwort

2
/(?:(?:^|\s)(?:one|two|three|four|five|six|seven|eight|nine|ten)(?=\s|$)){4,}/ 

PHP-Code:

if (preg_match(...put regex here..., $stringToTestAgainst)) { 
    // ... 
} 

Hinweis: Mehr wor ds (z.B. 'Zwölf') kann leicht zum Regex hinzugefügt werden.

+0

danke wird das Leerzeichen zwischen den Wörtern behandeln? –

+0

@Sherif, ja. Beachten Sie, dass Sie die Regex in eine Zeichenfolge ('" /.../ "') setzen müssen, und Sie müssen wahrscheinlich das '\ s' (=>' \\ s') umgehen. – James

+1

Erlaubte Zahlen sind von null bis neun aber nicht zehn – Toto

4

Sie können es wie folgt tun:

\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:

Added Raum (s) im regulären Ausdruck - dank Kobi.

+2

Fehlt Ihnen nicht Leerzeichen zwischen den Wörtern? – Kobi

3

Eine weitere Option ist:

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

Das ist so ziemlich das gleiche wie der Rest. Das einzige interessante Bit ist der \s*? Teil - das wird die Abstände zwischen den Wörtern faul stimmen, so dass Sie nicht mit zusätzlichen Leerzeichen nach die Folge von 4 Worten enden. Die \b vor es stellt sicher, es gibt mindestens ein einzelnes Leerzeichen (oder ein anderes Trennzeichen nach dem letzten Wort, so !a b c d! wird übereinstimmen)

+1

+1 Ich mag diesen Ansatz sehr. Hier ist ein Rubular-Link dafür: http://rubular.com/r/Fm4dGwkNGg ... Du hast aber null vergessen. –

+0

@Mark - Danke. Ich habe es auch dort getestet, habe den Link einfach vergessen. Ich habe Null, aber es ist nicht sortiert ':)' – Kobi

+0

Oh ja, es ist in der Reihenfolge der Tastatur sortiert. Ich hätte bemerken sollen, dass Null eines der Beispiele in der Rubulinkette ist. Es tut uns leid. :) –

Verwandte Themen