Avatar billede little_kim86 Nybegynder
27. september 2005 - 21:45 Der er 27 kommentarer og
1 løsning

Regulære udtryk

Jeg skal bruge en if sætning der er falsk hvis der kommer et tegn som der ikk står der må være i sætningen...

Der må komme følgende tegn:

A-Å, a-å, 0-9, - _ ( ) . og mellemrum...

Håber nogle kan hjælpe med det regulære udtryk...


//Kim Laursen
Avatar billede nielle Nybegynder
27. september 2005 - 22:22 #1
$str = "Der må komme følgende tegn: A-Å, a-å, 0-9, - _ ( ) . og mellemrum...";

if preg_match("/[^a-zæøå0-9()_ -]/i", $str)
    echo "Ulovligt tegn";
else
    echo "Alt er ok";
Avatar billede coderdk Praktikant
27. september 2005 - 22:48 #2
Skal nok være:

if ( preg_match("/^[^a-zæøå0-9()_ -]+$/i", $str) )
Avatar billede coderdk Praktikant
27. september 2005 - 22:49 #3
Faktisk:

if ( preg_match("/^[^a-zæøåÆØÅ0-9()_\. -]+$/i", $str) )
Avatar billede nielle Nybegynder
27. september 2005 - 22:49 #4
Ja, selvfølgelig :^)
Avatar billede nielle Nybegynder
27. september 2005 - 22:50 #5
Nej, 'i' klare faktisk også de store og små versioner af æ, ø og å.
Avatar billede coderdk Praktikant
27. september 2005 - 22:53 #6
Ikke hos mig: echo ( preg_match( "/[æøå]/i", "ÆØÅ" ) ? "Yep" : "Nope" );
Avatar billede coderdk Praktikant
27. september 2005 - 22:54 #7
(Ja, altså den skriver "Nope" hos mig :) )
Avatar billede nielle Nybegynder
27. september 2005 - 22:59 #8
Denne kode:

<?
$string = "ÆØÅ";

if (preg_match("/[^a-zæøå0-9]/i", $string))
{
    echo "Falsk";
}
else
{
    echo "Korrekt";
}
?>

- på denne side:

http://www.frip.dk/nielle/e650627.php

Her gør den det altså. Konklusion - det må have noget at gøre med om det aktuelle site er sat op til dansk eller ej.
Avatar billede coderdk Praktikant
27. september 2005 - 23:01 #9
Yep, det er sikkert noget locale der er sat på frip.dk :)
Avatar billede nielle Nybegynder
27. september 2005 - 23:02 #10
Avatar billede coderdk Praktikant
27. september 2005 - 23:04 #11
Denne skriver dog "Yep" hos mig, så det er locale der er sat på frip ;)

    setlocale( LC_ALL, "da_DK" );
    echo ( preg_match( "/[æøå]/i", "ÆØÅ" ) ? "Yep" : "Nope" );
Avatar billede nielle Nybegynder
27. september 2005 - 23:05 #12
Personligt synes jeg faktisk at det er en rigtigt dårlig feature ved PHP at opførslen af preg_match() ændre sig med lokalet. Det kan være årsag til mange mystiske fejl når man flytter kode fra et site til et andet - eller når folk klipper kode-eksempler fra Nettet. :^|
Avatar billede coderdk Praktikant
27. september 2005 - 23:06 #13
hehe yep :)
Avatar billede barklund Nybegynder
30. september 2005 - 13:26 #14
Ehm, ovenstående udtrykker tjekker da, om hele strengen består af ulovlige tegn? Er det ikke blot, hvis der er et enkelt ulovligt tegn? - altså som den allerførste kommentar fra nielle nævner?

For eksempel "foobär" består ikke udelukkende af tegn, der ikke er i tegnklassen - og derfor vil den ikke opfylde udtrykket og vil dermed gå igennem som accepteret.

Derudover kan man bruge \w til at fange tegn, der er tilladte i ord. Det afhænger dog at LOCALE hvilke tegn, det er, men hvis den er sat til noget iso-8859-1-fætter, så vil den både fange æøå, men også ã, û og den slags (skulle jeg mene) :)

(og beklager den sene kommentar - men mail-udsending sker lidt spøjst for tiden)

--
Morten Barklund
Avatar billede barklund Nybegynder
30. september 2005 - 13:26 #15
(og med ovenstående "forkerte" udtryk henviser jeg til coderdk's anden kommentar af 27/09-2005 22:49:31)
Avatar billede coderdk Praktikant
30. september 2005 - 15:27 #16
Du har ret barklund, min burde have været:

  if ( preg_match("/^[a-zæøåÆØÅ0-9()_\. -]+$/i", $str) )
  {
    echo "Alt er ok";
  }
  else
  {
    echo "Feeeejl!";
  }

Så vi kan konkludere at hvis locale er sat, så var nielle's første kommentar fyldestgørende ;) Ellers skulle der bare være ÆØÅ i den også.
Avatar billede barklund Nybegynder
30. september 2005 - 15:30 #17
Jeg ville nu bare gøre:

  if (!preg_match("/[^a-zæøåÆØÅ0-9()_. -]/i", $str)) {
    echo "Alt er ok";
  } else {
    echo "Feeeejl!";
  }

:)

--
Morten Barklund
Avatar billede coderdk Praktikant
30. september 2005 - 15:32 #18
Yeps :)
Avatar billede little_kim86 Nybegynder
30. september 2005 - 16:00 #19
Barklund i det du skriver, skrive den så fejl hvis bare et regn i teksen ikke er et af de bogstaver?
Avatar billede nielle Nybegynder
30. september 2005 - 17:20 #20
30/09-2005 16:00:20> Korrekt.
Avatar billede little_kim86 Nybegynder
30. september 2005 - 23:21 #21
Nogle af jer der kender en side hvor man kan finde noget mere om disse slags udtryk?
Avatar billede coderdk Praktikant
30. september 2005 - 23:53 #22
Kender kun http://regularexpressions.info/ - Men har ikke rigtig været i dybden på den...
Avatar billede nielle Nybegynder
01. oktober 2005 - 07:17 #23
Den er udemærket, og det er denne her også:

http://www.regexlib.com/

Desuden finder du lidt her i denne artikel:

http://www.eksperten.dk/artikler/780
Avatar billede little_kim86 Nybegynder
01. oktober 2005 - 16:04 #24
Nu har jeg jo rodet lidt med det... Hvorfor går denne string ikke igennem?

Rep. Fest d. 17-09-2005
Avatar billede little_kim86 Nybegynder
01. oktober 2005 - 16:17 #25
Bare lige glem det jeg skrev det... Var bare lidt for hurtig til at skrive her ind...

Men vil dem der syntes de fortjæner point lige ligge et svar?
Avatar billede coderdk Praktikant
01. oktober 2005 - 16:32 #26
Ingen til mig tak :)
Avatar billede little_kim86 Nybegynder
15. oktober 2005 - 01:55 #27
Nogle der ville have nogle point... Hvis der ikk kommer nogle svar inden søndag så lukker jeg tråden...
Avatar billede nielle Nybegynder
17. oktober 2005 - 08:32 #28
.. oki :^)
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