Hallo,

Ik ben Roland nieuw op dit forum en ik houdt mij sinds 2 weken bezig met PHP.
De afgelopen dagen heb ik veel gelezen over reguliere expressies.
En ik dacht het ondertussen te snappen. Maar nu is er toch nog iets wat ik toch schijnbaar niet snap. Na het opnieuw lezen diverse documenten weet ik nog steeds niet wat er hier fout gaat.
Hopenlijk kunnen jullie mij helpen.

Groet,
Roland.


<?php
// We maken string $a aan en steken er een karakters in
$a = "1234abbbc789";
/* We maken string $b aan en geven aan wat er in string $a aanwezig moet zijn om aan de voorwaarden te voldoen.
In dit geval letter a, gevolgd door minimaal 1 * letter b en maximaal 2 * letter b, gevolgd door letter c.*/
$b = "/ab{1,2}c/";
// we kijken of voorwaarden $b in string $a aanwezig is.
if (preg_match ($b, $a)){
echo ("De expressie voldoet ");
}else{
echo ("Expressie is niet AANWEZIG");
// Dit vb levert echo "Expressie is niet AANWEZIG" op.
}
?>


Het probleem geval.

<?php
// We maken string $a aan en steken er een karakters in
$a = "1234abbbc789";
/* We maken string $b aan en geven aan wat er in string $a aanwezig moet zijn om aan de voorwaarden te voldoen.
In dit geval letter a, gevolgd door minimaal 1 * letter b en maximaal 2 * letter b. */
$b = "/ab{1,2}/";
// we kijken of voorwaarden $b in string $a aanwezig is.
if (preg_match ($b, $a)){
echo ("De expressie voldoet ");
}else{
echo ("Expressie is niet AANWEZIG");
/* Dit vb zou volgens mij echo "Expressie is niet AANWEZIG" moeten op leveren. Er staan immers 3 * letter b achter elkaar.
maar geeft echo "De expressie voldoet" aan.
Wat gaat hier fout? */
}
?>
De onderste regex matched "abb" en kijkt dus totaal niet verder dan dat. Als je alle b's wil dat zou je dit kunnen doen:

/ab+/

Maar Regex snap je niet in een paar dagen hoor.
ab bb = minimaal 1 en er zijn er maximaal 2 nu...

als je dit hebt: abbbb zouw die zeggen dat ie niet voldoet geloof ik...
Mebus screef;

als je dit hebt: abbbb zouw die zeggen dat ie niet voldoet geloof ik...

[einde]

Ook dan geeft hij aan dat de expressie voldoet aan de voorwaarden.
Ik kan mij vaag herinneren dat wat martijn schrijft klopt. Zodra er een matched is gevonden, wordt er niet verder gekeken.

Slik moet ik hier blij mee zijn?
Nu dacht ik slim te zijn door een invoer te begrenzen op minimaal 3 karakters en maximaal 35 van de toegestaande karakters door de volgende expressie.

^[_\.0-9a-z-]{3,35}

Begin er nu aan te twijfelen of dit wel lukt.
Affin ik heb weer wat om over na te denken en om mee te stoeien.

Groet,
Roland.
<?php

$str = 'as_';

$match = '/^[_\-a-zA-Z0-9]{3,35}/';

if(preg_match($match, $str)) {

echo 'ja';

} else {

echo 'nee';

}

?>

Dit controleert op a tot en met z ook in hoofdletters nummers liggend streepje en normaal streepje - en moet minstens 3 keer voorkomen en mag maximaal 35 keer voorkomen
Na 2 dagen intensief mij bezig gehouden te hebben met expressies kom ik niet meer verder.
Ik wil een “string” waarin een naam staat controleren op zijn geldigheid.
Als voorbeeld zou die naam er zo uit kunnen zien;
String “Johannes Jan Robert de Groot Boersma”
Toegepaste expressies; “^[A-Z][a-z]{2,}[a-zA-Z\s]”

Voorwaarden waaraan de expressie moet voldoen.
1. De eerste karakter moeten een Hoofdletter zijn.
2. De volgende 2 karakters mogen alleen kleineletters bevatten.
3. Daarna gevolgd door 1 spatie of èèn of meerdere kleine,- en/of hoofdletters.
4. In de hele string mogen maar maximaal 5 spaties voorkomen.
5. Er mogen GEEN 2 spatie op elkaar volgen.
6. Er mogen alleen letters en spaties in de expressies voorkomen.

Tot voorwaarden 3 heb de string getest.
Bij voorwaarde 3 gaat mis. Bv String “Joha7nnes” wordt als TRUE gezien.
Dat klopt ook wel want “Joha” voldoet aan de eerste 3 voorwaarden, en daarna stop de expressie met de string verder na te lopen. Want dan was deze het getal 7 tegen gekomen en had het de waarde FALSE moeten opleveren.
Ik weet niet meer hoe ik de expressies de gehele string kan laten door lopen. Zonde direct te stoppen als aan de voorwaardes worden voldaan.


Daarnaast heb ik de vraag of je ook met een functie kan laten zien welke karakters(reeks) de expressie vindt als de waarde TRUE is. Misschien klinkt het als of ik het graag allemaal voorgekauwd willen hebben.
Alleen tussen door ben ik ook zo een paar uur bezig om 1 functie een beetje te door gronden, om er vervolgens achter te komen, dat het niet de functie is die ik dan nodig heb.

Groet,
Roland.

P.S mebus. Het maximaal van 35 keer gaat niet op. Bij 3 is aan de expressie voldaan. En dan houdt de expressie op met verder kijken.

Reageren