+ en $ en ' en " niet toestaan in string.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Joni Fleischer

Joni Fleischer

01/02/2010 19:58:00
Quote Anchor link
Hallo allemaal,

Ik wil de volgende tekens weigeren uit een string:

$
+
'
"

nu heb ik preg_match geprobeerd, maar dan gaat het nie zo goed...

Warning: preg_match() [function.preg-match]: Unknown modifier '+' in /home/paintmarkt/domains/paintballmarkt.nl/public_html/mira/cms/content/album.php on line 150

weet iemand hoe ik dit doe?

Heb nu:
if (preg_match("/$/+", $_POST['albumnaam'])) {
echo '<font color="#FF0000"><b>Albumnaam mag geen $, + of aanhalingstekens bevatten.</b></font><br>';
$SchrijfForm = true;
}
 
PHP hulp

PHP hulp

22/12/2024 22:49:31
 
Wim E

Wim E

01/02/2010 20:00:00
Quote Anchor link
Moet die niet ge-escaped worden? En staat er niets in regex libary?
 
Joni Fleischer

Joni Fleischer

01/02/2010 20:01:00
Quote Anchor link
Geen flauw idee, maar als je goede versie kan geven zou dat mij zeer helpen :)
 
Richard van Velzen

Richard van Velzen

01/02/2010 20:04:00
Quote Anchor link
Waarom zo moeilijk doen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if (str_replace(array('$', '+', "'", '"'), '', $str) !== $str) {
    // kwam voor
}[/code]

Maar een betere vraag: waarom wil je dit? Maak een lijst van *wel* toegestane tekens en verwerk dat in een regex.
 
Joni Fleischer

Joni Fleischer

02/02/2010 20:40:00
Quote Anchor link
Dank je wel Richard :) dat werkt perfect :)
 
Toby hinloopen

toby hinloopen

02/02/2010 20:45:00
Quote Anchor link
RichardvV schreef op 01.02.2010 20:04:
Waarom zo moeilijk doen?

*

Maar een betere vraag: waarom wil je dit? Maak een lijst van *wel* toegestane tekens en verwerk dat in een regex.


Waarom moeilijk doen?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if (strpbrk($str,'$+\'"')) {
  // kwam voor
}
?>


;)

http://php.net/manual/function.strpbrk.php
Gewijzigd op 01/01/1970 01:00:00 door toby hinloopen
 
P Lekensteyn

P Lekensteyn

02/02/2010 21:39:00
Quote Anchor link
Waarom de naam weigeren?
Vervang direct dan de tekens :)
 
GaMer B

GaMer B

02/02/2010 21:51:00
Quote Anchor link
Wil je het met preg_match doen? Dat kan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

if (preg_match("/[\+\$'\"]/", $_POST['albumnaam']))
{

    echo '<font color="#FF0000"><b>Albumnaam mag geen $, + of aanhalingstekens bevatten.</b></font><br>';
    $SchrijfForm = true;
}[
/code]
 
Toby hinloopen

toby hinloopen

03/02/2010 07:01:00
Quote Anchor link
Peter schreef op 02.02.2010 21:39:
Waarom de naam weigeren?
Vervang direct dan de tekens :)

Sure. Iemand vult zijn username in met o.a. die tekens. Vervolgens wordt de ingevulde naam - exclusief de tekens - in de database gemikt zonder de gebruiker er van op de hoogte te stellen. Daarna doet de gebruiker een poging in te loggen en krijgt de melding dat de gebruikersnaam niet bestaat.

Natuurlijk kan je een melding geven dat de tekens gestript zijn en zelfs erbij zetten wat de nieuwe gebruikersnaam is, maar dan is er een redelijke kans dat de gebruiker niet tevreden is met de gestripte versie. Stel bijv. dat een gebruiker als username zijn S veranderde in een $. Deze $ wordt dan gestript en daardoor klopt zijn username niet meer omdat er geen "S" meer in zit.

Gewoon niet toestaan en foutmelding geven is dus veel beter.

edit:
Owke, het gaat hier om een albumnaam, maar ook daarbij gelden mijn argumenten nog.
Gewijzigd op 01/01/1970 01:00:00 door toby hinloopen
 
Richard van Velzen

Richard van Velzen

03/02/2010 08:33:00
Quote Anchor link
GaMer13 schreef op 02.02.2010 21:51:
Wil je het met preg_match doen? Dat kan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

if (preg_match("/[\+\$'\"]/", $_POST['albumnaam']))
{

    echo '<font color="#FF0000"><b>Albumnaam mag geen $, + of aanhalingstekens bevatten.</b></font><br>';
    $SchrijfForm = true;
}[
/code][/quote]
Zoals blijkbaar niet bekend bij jou hoef je metakarakters nauwelijks te escapen in een character class:
[
code]preg_match('{\A[^+$"\']++\z}', $_POST['albumnaam']);[/code]

@
toby: ja, klopt, strpbrk kan ook. Er is een heel aantal manieren waarop je dit exact kunt doen. :]
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.