Avatar billede hanne_e Nybegynder
31. juli 2006 - 19:19 Der er 23 kommentarer og
1 løsning

hjælp til eregi

Hejsa eksperter
jeg har lige glemt hvordan det nu lige er det er...

jeg har to typer numre - hvis nummeret starter med 0 skal der ske noget og hvis nummeret starter med 94 skal der ske noget andet...

noget i den her dur...

  if(eregi('[0]', $nummer)) {
    ske noget;
  }  else    {
    ske noget andet;
  }

det er bare lige det med syntaxen i den der eregi-ting...
kan i hjælpe?
Avatar billede iss Novice
31. juli 2006 - 19:38 #1
Du skal ikke bruge ereg, den er ved at dø...
if (preg_match('[^0]', $nummer)) {
    echo "Starter med 0";
}
elseif (preg_match('[^94]', $nummer)) {
    echo "Starter med 94";
}
else {
    echo "Starter ikke med 0 eller 94";
}
Avatar billede nielle Nybegynder
31. juli 2006 - 19:39 #2
Gå over til at brug de meget bedre preg-funktioner:

if (preg_match("/^0\d*/", $nummer))
    echo "ske noget";
else if (preg_match("/^94\d*/", $nummer))
    echo "ske noget andet";
else
    echo "ske noget helt tredje";
Avatar billede Slettet bruger
31. juli 2006 - 19:39 #3
Det er forkert at sætte ' omkring et nummer, da det er interger.
Men du kan da bare
$numb = substr($nummer, 0, 2);
if($numb == 0) {
  //.........
} elseif($numb == 94) {
  //.........
} else {
  //fejl ect.
}
Avatar billede iss Novice
31. juli 2006 - 19:46 #4
coldgate, du glemmer f.eks 007....
Avatar billede hanne_e Nybegynder
31. juli 2006 - 19:46 #5
nej er den ved at dø??? det var da ikke så godt! nåmen så prøver jeg lige preg'en - hvorfor er der lige den der forskel i jeres syntax? - altså det der d - hvad gør det?
Avatar billede hanne_e Nybegynder
31. juli 2006 - 19:49 #6
jeg testede iss's forslag og det virkede fortrinligt - tak for det!
Avatar billede hanne_e Nybegynder
31. juli 2006 - 19:51 #7
hvis nielle lige vil uddybe det med de d'er - så kan i to lægge et svar.

coldgates forslag forstår jeg ikke umiddelbart, så jeg ved ikke om det ville kunne bruges - men tak for hjælpen alle!
Avatar billede Slettet bruger
31. juli 2006 - 19:56 #8
Ja du har ret iss, da den kun skal tjekke på et tegn, med 0 åbenbart,
Avatar billede nielle Nybegynder
31. juli 2006 - 20:01 #9
\d står for "digit", eller for "ciffer" på dansk. Den efterfølgende * står for "0 eller flere":

"/^0\d*/" og "/^94\d*/"

- betyder hhv. et "0" eller et "94" efterfulgt af "0 eller flere cifre".
Avatar billede nielle Nybegynder
31. juli 2006 - 20:05 #10
Man kan også udelade \d*:

"/^0/" og "/^94/"

(og så har man iss' løsning)

Imidlertid tillader den at der står noget andet end kun cifre efter starten:

"00 hmm det er ikke krævet at der er tale om et tal"

Dette har egentlig ikke nogen betydning, hvis du på forhånd er sikker på at der kun står tal.

I øvrigt var mit forlag heller ikke uden smuthuller. Burde se sådan her ud:

if (preg_match("/^0\d*$/", $nummer))
    echo "ske noget";
else if (preg_match("/^94\d*$/", $nummer))
    echo "ske noget andet";
else
    echo "ske noget helt tredje";
Avatar billede Slettet bruger
31. juli 2006 - 20:09 #11
Hvad står de forskellige ting for, kender du en side hvor man kan se de der regular expression?
/ er bare for at udkommentere ^ så det ikke laver fejl ikke?
^ Betyder start?
94 er tallet
\d cifre siger du
* = et eller andet bagefter?
$ = ?
/ igen bare for at udkommentere ikke?
Avatar billede nielle Nybegynder
31. juli 2006 - 20:21 #12
/.../ skal med fordi sådan er syntaksen nu engang. Det har intet med ^-tegnet at gøre. Syntaksen er iøvrig inspireret af perl. En af grundene til at de skal være der er bl.a. at man kan skrive noget efter dem - f.eks. i hvis man vil have sin regexp til at behandle store og små bogstaver ens:

"/.../i"

Det er faktisk det samme i som i din eregi(). :^)

^ - er et "anker", og det betyder "starten af linjen". Uden dette, f.eks. med:

preg_match("/0\d*$/", $nummer)

- ville den bare matche noget hvor at der vare et 0 et eller andet sted (også hvis det er i starten).

\d - betyder ciffer. En anden måde at skrive det samme på ville være 0-9, men så er\d no lidt mere kompakt.

* - betyder som sagt "0 eller flere". Der er andre muligheder, f.eks. den mest almindelige:

+ - som betyder "1 eller flere".

$ - er den modsatte af ^. Dette "anker" matcher med slutningen af strengen.


Mønsteret:

"/^94\d*$/"

- skal derfor læses:

"Starten af strengen, derefter 9, derefter 4, derefter 0 eller flere ciffre, og tilsidst slutningen af strengen."

- eller bare:

"et heltal som starter med 94".

Håber at det kastede lidt lys over sagerne?
Avatar billede nielle Nybegynder
31. juli 2006 - 20:23 #13
Kender ingen danske sider, men her er der f.eks. en rigtig god en (desværre er indlæringskurven på regexp'er lidt stejl når man møder dem for første gang):

http://www.regularexpressions.info/
Avatar billede Slettet bruger
31. juli 2006 - 21:40 #14
Det lyder super, god forklaring!
Avatar billede nielle Nybegynder
31. juli 2006 - 22:56 #15
Svar :^)
Avatar billede hanne_e Nybegynder
01. august 2006 - 00:22 #16
ups - jeg har lige et lille tillægsspørgsmål...

jeg arbejder med 2 typer numre for samme ting (de har været så smarte bare at skifte numre uden at tænke på at der er konsekvenser... og de gamle numre eksisterer altså sideløbende med de nye til de er udfaset...)

det nye ser sådan ud
9401 06 0021
og det gamle sådan
001 06 002

det første (3 cifre) er typen, så årstallet og så et løbenr.

så er det sådan at jeg skal hente alle af samme type i databasen - 9401 er altså samme type 001 fordi begge ender på 01.

hvordan skal regexp. så se ud? i databasen er det bare et langt nummer uden mellemrum...

kan i hjælpe med det også??? på forhånd 1000000 tak
- og smid bare om jer med svar ;-)
Avatar billede nielle Nybegynder
01. august 2006 - 06:49 #17
Hvis du skal hente alle numre som f.eks. slutter med "...01" så kan det gøres allerede i SQL-sætningen:

SELECT * FROM dinTabel WHERE nummer LIKE '%01'

En løsning med en regexp ville derimod kræve at du først udtrak alle tal, og så bearbejdede dem bagefter. Ikke nært så økonomosk. :^)
Avatar billede gizmo-gizmo Nybegynder
01. august 2006 - 08:43 #18
Lige lidt dansk læsestof om regulære udtryk: http://phpartikler.dk/artikler/regexp.php
Avatar billede hanne_e Nybegynder
01. august 2006 - 11:40 #19
hej igen
nå ja det er selvfølgelig i mysql'en. du kan vel ikke liiige hjælpe med hvordan den checker om hhv. 3. og 4. tal  eller 2. og 3. tal fx er 01? jeg kan jo ikke checke bagfra da der kommer flere tal derefter...

eller skal jeg oprette et nyt spørgsmål om det?
Avatar billede nielle Nybegynder
01. august 2006 - 12:48 #20
I SQL fungere _-tegnet som et wildcard for et enkelt tegn. Hvis man derfor ønsker at udtrække de poster 3+4 poition er "01", så kan det gøres ved:

SELECT * FROM dinTabel WHERE nummer LIKE '__01%'
Avatar billede hanne_e Nybegynder
01. august 2006 - 22:49 #21
kan man så sige noget i retning af:
SELECT * FROM dinTabel
WHERE nummer LIKE '__01%'
OR nummer LIKE '_01%'

så kommer der en masser and-sætninger bagefter - skal man så bruge parenteser?
Avatar billede hanne_e Nybegynder
01. august 2006 - 22:51 #22
hov du må hellere få points - du har været utroligt god til at hjælp!!! Så der er ikke noget krav om at svare på det sidste... det var bare en tillægsting... ;-) men hvis nogen svarer bliver jeg da glad :-)
Avatar billede nielle Nybegynder
02. august 2006 - 06:46 #23
Ja:

kan man så sige noget i retning af:
SELECT * FROM dinTabel
WHERE
(
nummer LIKE '__01%' OR
nummer LIKE '_01%'
) AND
betingelse1 AND
betingelse2 AND
...
Avatar billede hanne_e Nybegynder
02. august 2006 - 11:20 #24
det ser fornuftigt ud! jeg afprøver lige! 1000 tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester