[PHP] regex spatie probleem

Pagina: 1
Acties:

  • Renegade
  • Registratie: December 2000
  • Laatst online: 14-10-2020
Ik heb een form waar ik mbv een regex een controle op de ingevulde waarden wil uitvoeren.

Een probleem waar ik mee zit is dat ik bijvoorbeeld een adres kan hebben als:

Zoete Kroon 36 A (dus met meerdere spaties) of
Zoete Kroon 36a
Zoete-Kroon36a
etc...

Ik wil deze manieren gaan controleren met een regex, maar het aantal en de locatie van de spaties wil me niet helemaal lukken.

een regex als:
PHP:
1
2
3
<?
eregi("^[A-Za-z0-9]*[[:space:]]*[0-9]*[[:space:]]*[A-Za-z]+$", $adres)
?>

gaat niet werken omdat ie nu perse een spatie voor het getal wil hebben bij een adres, dus "Zoete Kroon 36a"
accepteert ie niet, maar plaats ik een spatie tussen de 36 en de a weer wel.

Maak ik er wat anders van:
PHP:
1
2
3
<?
eregi("^[A-Za-z0-9[:space:]]+$", $adres)
?>

dan accepteert ie weer een adres met bijvoorbeeld alleen maar spaties.

Kan iemand me hierbij helpen/uitleg geven?

Thanks ;)

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE
@BasRaayman op twitter


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Op dinsdag 08 januari 2002 11:37 schreef Renegade het volgende:
een regex als:
PHP:
1
2
3
<?
eregi("^[A-Za-z0-9]*[[:space:]]*[0-9]*[[:space:]]*[A-Za-z]+$", $adres)
?>

gaat niet werken omdat ie nu perse een spatie voor het getal wil hebben bij een adres, dus "Zoete Kroon 36a"
accepteert ie niet, maar plaats ik een spatie tussen de 36 en de a weer wel.
PHP:
1
2
3
<?
eregi("^[A-Za-z0-9]+ *[0-9]+ *[A-Za-z]*$", $adres);
?>

Ik heb [[:space:]] even vervangen door spaties.
en * -> +

Test 'm nou eens?

Localhost, sweet localhost


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
PHP:
1
2
3
<?
eregi("^[A-Za-z0-9]+ *[0-9]+ *[A-Za-z]*$", $adres);
?>
op deze manier is iets als "Zoete Kroon 26" niet toegestaan.
Daarnaast gebruik je eregi, dus '[A-Za-z]' is niet nodig.

edit

ik zal ook ff een poging doen: ;)
PHP:
1
2
3
<?
eregi("^[A-Z0-9]+[ A-Z0-9]? [0-9]+( [A-Z]+)?$", $adres);
?>

  • Renegade
  • Registratie: December 2000
  • Laatst online: 14-10-2020
* Renegade heeft ondertussen het middageten op en ff gekeken naar de oplossingen :)

Warning: REG_BADRPT bij beide regex'en (Nieuw woord :? :P)

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE
@BasRaayman op twitter


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
oeps, het moet zijn:
code:
1
2
eregi("^[A-Z0-9]+[ A-Z0-9]* [0-9]+( [A-Z]+)?$", $adres);
                  ^ ipv ?

maar het geeft bij mij geen fout hoor :?

  • Renegade
  • Registratie: December 2000
  • Laatst online: 14-10-2020
Op dinsdag 08 januari 2002 14:10 schreef marcusk het volgende:
oeps, het moet zijn:
code:
1
2
eregi("^[A-Z0-9]+[ A-Z0-9]* [0-9]+( [A-Z]+)?$", $adres);
                  ^ ipv ?

maar het geeft bij mij geen fout hoor :?
Zat het idd in :)

maar nu doet ie het wel met:
zoete kroon 13 a

maar weer niet met:
zoete kroon 13a

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE
@BasRaayman op twitter


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
ok, versie 3 ;) :
code:
1
2
eregi("^[A-Z0-9]+[ A-Z0-9]* [0-9]+( ?[A-Z]+)?$", $adres);
                        ^

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

* drm geeft de voorkeur aan preg_match
code:
1
2
3
4
5
6
7
8
9
$regex = "/(([A-Za-z\-])\s+)+([0-9]+)\s*([a-zA-Z]?)/";
         \________/ \_/ | \___/  \_/ \_______/
            |   |  |   |     |  |
            |   |  |   |     |    eventueel achtervoegsel
            |   |  |   |     eventueel meerdere spaties tussen huisnummer en achtervoegsel
            |   |  |   huisnummer
            |   |  meerdere woorden incl. spaties toegestaan
            |     meerdere spaties toegestaan
            woorden (in dit geval "Zoete" of "Zoete-kroon" oid)

Sorry voor de layoutverneuking :z

typvaudten voorbehauwe

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Renegade
  • Registratie: December 2000
  • Laatst online: 14-10-2020
Op dinsdag 08 januari 2002 14:21 schreef marcusk het volgende:
ok, versie 3 ;) :
code:
1
2
eregi("^[A-Z0-9]+[ A-Z0-9]* [0-9]+( ?[A-Z]+)?$", $adres);
                        ^
Die werkt behoorlijk goed, alleen 1 laatste ding doet het nog niet:

Zoetekroon32a

(ja ik ben soepel met de invulmanieren ;))

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE
@BasRaayman op twitter


  • Renegade
  • Registratie: December 2000
  • Laatst online: 14-10-2020
Op dinsdag 08 januari 2002 14:22 schreef drm het volgende:
* drm geeft de voorkeur aan preg_match
code:
1
2
3
4
5
6
7
8
9
$regex = "/(([A-Za-z\-])\s+)+([0-9]+)\s*([a-zA-Z]?)/";
         \________/ \_/ | \___/  \_/ \_______/
            |   |  |   |     |  |
            |   |  |   |     |    eventueel achtervoegsel
            |   |  |   |     eventueel meerdere spaties tussen huisnummer en achtervoegsel
            |   |  |   huisnummer
            |   |  meerdere woorden incl. spaties toegestaan
            |     meerdere spaties toegestaan
            woorden (in dit geval "Zoete" of "Zoete-kroon" oid)

Sorry voor de layoutverneuking :z

typvaudten voorbehauwe
Cool!
alleen een
code:
1
preg_match("/(([A-Za-z\-])\s+)+([0-9]+)\s*([a-zA-Z]?)/","$adres");

geeft niet echt het gewenste resultaat, of probeer ik nu de functie verkeerd te benaderen? (volgens de manual zou dit namelijk moeten kunnen (geloof ik :P))

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE
@BasRaayman op twitter


Verwijderd

PHP:
1
2
3
<?
if(!preq_match(("/(([A-Za-z\-])\s+)+([0-9]+)\s*([a-zA-Z]?)/","$adres")) die("Er gaat iets mis!"); 
?>

Want de manual zegt letterlijk dit:
Returns TRUE if a match for pattern was found in the subject string, or FALSE if not match was found or an error occurred.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op dinsdag 08 januari 2002 14:22 schreef drm het volgende:
* drm geeft de voorkeur aan preg_match
* marcusk op zich ook, maar in dit geval maakt het erg weinig uit.

  • Renegade
  • Registratie: December 2000
  • Laatst online: 14-10-2020
Ok, de code die ik voor die preg_match gebruikte was:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
if (!preg_match("/(([A-Za-z\-])\s+)+([0-9]+)\s*([a-zA-Z]?)/", "$adres"))
{
 $adres_incorrect= "Uw adres is onjuist ingevuld";
}
else
{
 $adres_correct= "Uw adres is ingevuld";

}
?>

En voor zover ik weet zou dat moeten werken :? Maar dit geeft dus niet het gewenste resultaat.

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE
@BasRaayman op twitter


Verwijderd

Op dinsdag 08 januari 2002 14:51 schreef Renegade het volgende:
Ok, de code die ik voor die preg_match gebruikte was:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
if (!preg_match("/(([A-Za-z\-])\s+)+([0-9]+)\s*([a-zA-Z]?)/", "$adres"))
{
 $adres_incorrect= "Uw adres is onjuist ingevuld";
}
else
{
 $adres_correct= "Uw adres is ingevuld";

}
?>

En voor zover ik weetr zou dat moeten werken :? Maar dit geeft dus niet het gewenste resultaat.
Dit is toch ook niet handig jongen!
Kijk eens goed naar je code.
pseudo
code:
1
2
ALS(PREG_MATCH niet goed is) MAAK STRING adres_incorrect MET WAARDE uw adres is onjuist ingevuld
ANDERS MAAK STRING adres_correct MET WAARDE uw adres is ingevuld

Zie je het nu?

  • Renegade
  • Registratie: December 2000
  • Laatst online: 14-10-2020
Ik weet dat de code korter en efficienter kan, maar ik had het even zo gedaan om zeker te weten dat er in de rest van mijn code geen fouten zaten (ja, da's best wel omslachtig ;)), maar hij doet het nog steeds niet.

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE
@BasRaayman op twitter


Verwijderd

bool dat ding dan...

  • Renegade
  • Registratie: December 2000
  • Laatst online: 14-10-2020
Op dinsdag 08 januari 2002 15:19 schreef daniel_hoenderdos het volgende:
bool dat ding dan...
Ok, nu ben je me kwijt... :)

Dit is toch een boolean vergelijking?

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE
@BasRaayman op twitter


Verwijderd

Nee, want wat je doet zijn twee verschillende STRING type variabelen aanmaken.
Maak een boolean (een variabele met waarde true of false dus!).

pseudo
code:
1
2
ALS(PREG_MATCH niet goed is) MAAK BOOL check MET WAARDE FALSE
ANDERS MAAK BOOL check MET WAARDE TRUE

Of doe het nog efficienter:
pseudo
code:
1
2
ALS(PREG_MATCH niet goed is) DIE error
ANDERS doe de rest

Snappie?

  • Renegade
  • Registratie: December 2000
  • Laatst online: 14-10-2020
Op dinsdag 08 januari 2002 15:55 schreef daniel_hoenderdos het volgende:
Nee, want wat je doet zijn twee verschillende STRING type variabelen aanmaken.
Maak een boolean (een variabele met waarde true of false dus!).

pseudo
code:
1
2
ALS(PREG_MATCH niet goed is) MAAK BOOL check MET WAARDE FALSE
ANDERS MAAK BOOL check MET WAARDE TRUE

Of doe het nog efficienter:
pseudo
code:
1
2
ALS(PREG_MATCH niet goed is) DIE error
ANDERS doe de rest

Snappie?
Dat snap ik wel, maar de vergelijking zelf is een boolean voor zover ik weet?

Als de preg_match niet succesvol is uitgevoerd (false) doe dit, anders (true) doe dat.
code:
1
$Renegade($coffee++);

:P

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE
@BasRaayman op twitter


Verwijderd

:D
Zeer juist opgemerkt. Zag ik zelf ook net.
$Daniël=AddCoffee($Daniël, $moetjuistmeerbij); ;)

  • Renegade
  • Registratie: December 2000
  • Laatst online: 14-10-2020
:D

Maar veel verder ben ik nu nog niet, want de preg_match controleert niet goed :P

Volgende poging dan maar :)

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE
@BasRaayman op twitter


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Op dinsdag 08 januari 2002 14:46 schreef marcusk het volgende:

[..]

* marcusk op zich ook, maar in dit geval maakt het erg weinig uit.
* drm geeft per definitie de voorkeur aan preg_*
:P
Maar je hebt wel gelijk...

Renegade >
lame ff puzzelen, dan ga ik kijken wat er niet klopt aan m'n eigen (nota bene ;)) regex

* schuift in een hoekje en pakt z'n puzzelboekje

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op dinsdag 08 januari 2002 16:16 schreef Renegade het volgende:
Maar veel verder ben ik nu nog niet, want de preg_match controleert niet goed :P
hoezo?
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
    $adres = "Bla bla 21B";
    
    $r = eregi("^[A-Z0-9]+[- A-Z0-9]* [0-9]+( ?[A-Z]+)?$", $adres);
    echo ($r ? "true" : "false");
    
    echo "<br>";
    
    $r = preg_match("/(([A-Z\-])\s+)+([0-9]+)\s*([A-Z]?)/i", $adres);
    echo ($r ? "true" : "false");    
?>

geeft bij mij "true" en "true".

voor "Blabla21B" moet je er resp. van maken:
code:
1
2
^[A-Z0-9]+[- A-Z0-9]* ?[0-9]+( ?[A-Z]+)?$
                ^

en
code:
1
2
/(([A-Z\-])\s*)+([0-9]+)\s*([A-Z]?)/i
         ^ (lijkt mij)

  • Grum
  • Registratie: Juni 2001
  • Niet online
Korte Dwarsstaat 42b 2hoog <-- mag dat niet ? :P

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op dinsdag 08 januari 2002 18:48 schreef Grum_ het volgende:
Korte Dwarsstaat 42b 2hoog <-- mag dat niet ? :P
ereg(".*", $adres)

zo goed? ;)

  • Renegade
  • Registratie: December 2000
  • Laatst online: 14-10-2020
Op dinsdag 08 januari 2002 19:21 schreef marcusk het volgende:

[..]

ereg(".*", $adres)

zo goed? ;)
lol :)

Het avondeten is ondertussen ook weggewerkt, dus ik ga er zo dan nog maar es mee aan het experimenteren.

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE
@BasRaayman op twitter


Verwijderd

Ik zou graag willen weten wat hier uit is gekomen. Ik zit namelijk met ongeveer hetzlefde probleem!

ik wil dat er in een string alleen A tm Z 0-9 en spaties gebruikt mogen worden... het maakt neit echt uit hoeveel spaties

  • tomato
  • Registratie: November 1999
  • Niet online
YoFreD: ik wil dat er in een string alleen A tm Z 0-9 en spaties gebruikt mogen worden
Ga eens even heel snel in de FAQ bij Regular Expressions kijken!

Hoe je dit doet staat op de eerste pagina van iedere regex tutorial...
Pagina: 1