ugrás a tartalomhoz

ereg() függvény használata

breakline · 2006. Jún. 10. (Szo), 10.07
Sziasztok

volna egy kis gondom, és nem értem miért nem működik a dolog:

<?php
$adat[]="1234567812345678";
$adat[]="12345678123456as";
$adat[]="as231";
$adat[]="1234567812345678123";
$adat[]="1234567812345678123asdasd";
foreach ($adat as $akt) 
 {
  if (!ereg('[0-9]{16}',$akt)) 
   {
   echo $akt." nem jó<br>";
   }
   else 
   {
    echo $akt. " jó<br>";
   }
 }
?>
Kimenet:

1234567812345678 jó
12345678123456as nem jó
as231 nem jó
1234567812345678123 jó
1234567812345678123asdasd jó


Az utolsó két esetben a program szintén "jót" jelez. Ha a {N} pontosan N előfordulást jelent, akkor ez hogyan lehet? Próbáltam a {16,16} és a {16,17} alakokat is, de szintén ez lett az eredmény. Mi lehet ezzel a probléma?

kösz
üdv
BL
 
1

próbáld így

Anonymous · 2006. Jún. 10. (Szo), 10.35

<?php
$adat[]="1234567812345678";
$adat[]="12345678123456as";
$adat[]="as231";
$adat[]="1234567812345678123";
$adat[]="1234567812345678123asdasd";
foreach ($adat as $akt)
 {
  if (!ereg('^[0-9]{16}$',$akt))
   {
   echo $akt." nem jó<br>";
   }
   else
   {
    echo $akt. " jó<br>";
   }
 }
?>
2

-

breakline · 2006. Jún. 10. (Szo), 10.40
köszönöm, most jobb
3

preg_match általában gyorsabb, mint az ereg

Dualon · 2006. Jún. 10. (Szo), 14.09
Megjegyzés: preg_match(), which uses a Perl-compatible regular expression syntax, is often a faster alternative to ereg().


Forrás: PHP Manual
4

az ok

vbence · 2006. Jún. 10. (Szo), 15.59
De miben más a Perl-compatible??? Ezért nem mertem soha átállni...
8

Offtopic: a puding próbája...

Dualon · 2006. Jún. 10. (Szo), 18.39
Elkezded próbálgatni, és rögvest kiderül. :)
9

A preg az valami egészen más

vbence · 2006. Jún. 10. (Szo), 23.57
Kipróbáltam, nem működött. Az ereg cuccot is most kezdtem pár hónapja. Kipróbáltam preggel, nem működött. Köszönöm szépen, de nincs kedvem megtanulni egy másik RegEx-et is :)
10

sokall több a lehetőség

Hodicska Gergely · 2006. Jún. 11. (V), 02.52
A PECRE könyvtár egyrészt gyorsabb, másrészt lényegesen több lehetőséget ad a kezedbe. Az átállás nem kerül szinte semmibe:
  • kell egy határoló jel a minta elejére és a végére, ami nem szerepelhet a mintában, ha mégis, akkor meg kell védeni
  • ha használtál közvetlenül számot a mintában, akkor azt át kell írni \x.... formára.
  • a cserék esetén is figyelni kell arra, hogy a csereszövegben lévő számok kezelése között van eltérés (az ereg ASCII kódnak veszi, a preg kerakternek).
  • a [[xxxx]] helyett a preg megfelelőiket kell használni.

Megéri átállni, egy jóval robosztusabb eszközt kapsz majd a kezedbe.


Felhő
5

De mi a kérdés?

vbence · 2006. Jún. 10. (Szo), 16.03
Mindent leírtál, csak azt nem, mi a várt eredmény? "Nem több, mint 16 számjegy" vagy "16számjegy és semmi más".. Az anonim megoldás alapján a másodikat szeretted volna, de nem tudom, hogy ő miből találta ki.. :)
6

elég egyértelmű volt

Anonymous · 2006. Jún. 10. (Szo), 16.08
az utolsó két sorból lehetett kikövetkeztetni.

gex
7

-

breakline · 2006. Jún. 10. (Szo), 18.13
Valójában egy bankszámlaszám adatról lenne szó, ami csak 16 vagy 24 jegyű szám kell hogy legyen, aztán ezt próbálgattam, most már működik, még egyszer köszi a segítséget. Sajnos sohasem mertem beelmélyedni a regex-be, de lassan már ideje lesz.:)
Azért is az ereg-gel írtam, mert nekem ez még egyszerűbbnek tűnik mint a linuxos "tesvérei", ehhez meg nem kell tényleg túlbonyolítani.