Avatar billede webcreator Nybegynder
11. august 2004 - 21:48 Der er 21 kommentarer og
1 løsning

Må indeholde a-aa, A-AA med flere

Hej Eksperter.

Hvordan laver jeg en IF'er med fx eregi der tjekker, om en string indeholder "ulovlige" tegn? Jeg ønsker at tillade :

a-å, A-Å, ! " ' # $ % ^ (  )  [  ]  ,  .  -  _  ~  ö  ä  ë  ü

Det er nok nemmere at lave en form for blackliste - jeg vil gerne undgå :

/  og  \

Jeg vil også gerne vide, hvordan jeg kan tilføje nye tegn
Avatar billede webcreator Nybegynder
11. august 2004 - 21:54 #1
Man kunne måske (smart synes jeg ..) lave en funktion på formen :

function check($blacklist, $string) {
    // Hvis $string indeholder tegn som er angivet i $blacklist, så sættes $error = true;
}

check("/\&#()", $string);
Avatar billede coderdk Praktikant
11. august 2004 - 22:02 #2
Jeg bruger selv preg*

Positivliste:

if ( preg_match( "/^[a-z!\"'#\$%\^\(\) \[\],\.\-_~öäëüæøåÆØÅ]*$/i", $dintext ) )
{
  // $dintext er ok!
}

Negativliste:

if ( !preg_match( "/[\/\\]/i", $dintext ) )
{
  // $dintext er ok!
}
Avatar billede coderdk Praktikant
11. august 2004 - 22:03 #3
Ja, ok negativlisten kunne undvære i'et til sidst:

preg_match( "/[\/\\]/", $dintext )
Avatar billede webcreator Nybegynder
11. august 2004 - 22:08 #4
Hvad er forskellen på preg_match og eregi og ereg ?
Avatar billede webcreator Nybegynder
11. august 2004 - 22:09 #5
- sådan i grove træk :)

Og er det muligt at lave sådan en fræk funktion, hvor du simpelthen bare angiver hvilke tegn du vil have blacklistet ?

check(a-b-c-d, $string)  <-- Fx. sådan (hvor man deler tegnene med et - (minus)-tegn
Avatar billede coderdk Praktikant
11. august 2004 - 22:10 #6
ereg* er POSIX regular expressions, preg* er PCRE (Perl Compatible Regular Expressions) :) Jeg er normalt ikke til perl, men deres regex har de styr på :)
Avatar billede coderdk Praktikant
11. august 2004 - 22:12 #7
function check( $blacklist, $string )
{
  return !preg_match( "/[" . $blacklist . "]/", $string );
}

Den returnerer sand hvis strengen ikke indeholder tegn fra negativlisten ;)
Avatar billede webcreator Nybegynder
11. august 2004 - 22:17 #8
På hvilken form angiver jeg så min blackliste ?

check("!#¤", $string);    <<-- sådan? Uden mellemrum eller noget?
Avatar billede coderdk Praktikant
11. august 2004 - 22:19 #9
yeps :) Der er lige en finte - nogle tegn er specialtegn... Punktum skal angives som \. du kan blackliste abcdefghijklmnopqrstuvwxyz ved blot at skrive a-z, derfor skal - også angives som \- osv
Avatar billede coderdk Praktikant
11. august 2004 - 22:20 #10
Ja, og () og [], hvis du vil have den til at være case-insensitive, så tilføj et i efter den sidste /
Avatar billede webcreator Nybegynder
11. august 2004 - 22:21 #11
Hey, cool !
Sådan en funktion har jeg sørme manglet længe. Den er jo virkelig simpel :)
Avatar billede webcreator Nybegynder
11. august 2004 - 22:22 #12
Ok, I see - mange tak. Smid lige et svar, mens jeg leger videre :))
Avatar billede webcreator Nybegynder
11. august 2004 - 22:25 #13
Hmm - hvad skal jeg skrive for at blocke for \  ?
Har prøvet med \\ men det virker ikke.
Avatar billede coderdk Praktikant
11. august 2004 - 22:28 #14
\\ burde faktisk gøre det!
Avatar billede coderdk Praktikant
11. august 2004 - 22:29 #15
Prøv lige med \\\\
Avatar billede coderdk Praktikant
11. august 2004 - 22:30 #16
Nej, \\ burde gøre det...
Avatar billede coderdk Praktikant
11. august 2004 - 22:32 #17
Erh, \\\\ virkede for mig ;P
Avatar billede webcreator Nybegynder
11. august 2004 - 22:33 #18
Jeg får fejlen :

Warning: Compilation failed: missing terminating ] for character class at offset 3 in c:\program files\easyphp1-7\www\config.php on line 75
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ooo', '30', '1', '1', now(), now())' at line 1

Linie 75  :  return !preg_match("/[".$blacklist."]/", $string);
Avatar billede coderdk Praktikant
11. august 2004 - 22:33 #19
Jeg fik den samme, \\\\ fjernede dog fejlen...
Avatar billede webcreator Nybegynder
11. august 2004 - 22:34 #20
Ja, virker med 4 \'er.

Vildt - for at blackliste \ og / skal jeg altså skrive \\\\\/  :-))
Avatar billede coderdk Praktikant
11. august 2004 - 22:37 #21
heheh yeah syret :)
Avatar billede webcreator Nybegynder
11. august 2004 - 22:39 #22
Du skal have tusind 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