webForumDet fria alternativet

Smartare regex för matching av siffror

PHP

5 svar · 2 025 visningar · startad av MickeA.com

Medlem sedan feb. 20034 441 inlägg
Frågan#1

Hej!

Håller på och ska identifiera nummer (fakturanummer i mitt fall) som angetts som referens vid betalning via bank.

Just nu kör jag det lättaste tänkbara med preg_replace för att endast behålla siffror:

/[^0-9]+/

Det fungerar i de flesta fallen. Dock finns det exempel på referenser som kan se ut såhär:

12345 bokningsnummer 3 vecka 32

Då blir "mitt fakturanr" 12345332 vilket gör att den inte hittas i databasen. Kan man snygga till det något så man t.ex. endast behåller det "stycke" som innehåller 4+ siffror som "sitter ihop". Fakturanummer har ju en fast längd?

Tack!

Medlem sedan juli 200012 978 inlägg
#2

Vad du vill ha kvar är alltså en harang med 4+ siffror oavsett var den står i texten!

Medlem sedan feb. 20034 441 inlägg
#3

Japp, något åt det hållet.. :)

Medlem sedan jan. 2005953 inlägg
#4

Använd preg_match istället och kör följande uttryck: /([0-9]{4,})/.
Om du vill kan du byta ut [0-9] mot \d

if (preg_match('/(\d{4,})/', $referens, $match)) {
    $fakturanummer = $match[1];
}
Medlem sedan mars 2006296 inlägg
#5

Med preg_match borde du kunna göra något så här /^[0-9]{4,}/ förutsatt att faktura numret kommer först. (^= början av strängen, {4,} = 4 eller fler)
http://regexr.com/39gv3

Edit: Too slow! metalboy hann före :)

Medlem sedan feb. 20034 441 inlägg
#6

Testade och nu klarade funktionen av att hantera/hitta betydligt fler.

Tack!

255 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)