gudn tach!
Ich möchte aus folgenden Strings das vorkommen einer Zahl prüfen, wie:
"der Text ist doof 12345678"
"Probetext 1234567890"
"1234567"
"Noch mehr 123456789 Text kommt nicht"ich habe das mit folgender Funktion probiert:
if (preg_match("/^[0-9]{5,10}$/", $text))
echo "Zahl ist drin!";
Das funzt aber nicht. :'(
Also {5,10} steht drin, da die Zahl mindestens 5 Stellen, maximal aber 10 nicht überschreiten soll.
es kamen schon so viele antworten kamen und auch ich moechte mich einer weiteren beteiligen. ich fand bisher die antwort von Gunnar am besten, da sie die richtigen fragen nach den grenzen stellt.
das regexp-pattern fuer die aufgabe, strings zu matchen, die 5- bis 10-stellige zahlen enthalten, koennte also z.b. lauten:
1. /\b[0-9]{5,10}\b/
2. /(?<![0-9])[0-9]{5,10}(?![0-9])/
oder
3. /(?<![^ ])[0-9]{5,10}(?![^ ])/
zu 1.: \b weisst etwa "word boundary" und markiert eine stelle, an der ein zeichen, dass ein buchstabe, eine ziffer oder ein '_' ist, nicht auf ein zeichen treffen darf, das ebenfalls buchstabe, ziffer oder '_' ist. gematcht wuerde also z.b. "1234567", "foo 123456-193865 bar", aber weder foo123456-193865bar" noch "foo12345bar".
zu 2.: (?<![0-9]) heisst etwa "vor dem naechsten zeichen darf kein zeichen der klasse [0-9] stehen". entsprechend heisst (?![0-9]) etwa "nach dem naechsten zeichen darf kein zeichen der klasse [0-9] stehen". gematcht wuerde also z.b. "1234567", "foo 123456-193865 bar" und auch "foo123456-193865bar" sowie "foo12345bar".
zu 3.: (?<![^ ]) heisst etwa "vor dem naechsten zeichen darf kein zeichen stehen, das kein leerzeichen ist". entsprechend heisst (?![^ ]) etwa "nach dem naechsten zeichen darf kein zeichen stehen, das kein leerzeichen ist". beachte, dass dies etwas anderes ist als (?<= ) ("vor dem naechsten zeichen muss ein leerzeichen stehen"). gematcht wuerde also z.b. "1234567" und "foo 123456 193865 bar", aber weder "foo 123456-193865 bar" noch "foo123456-193865bar" noch "foo12345bar".
prost
seth