Hallo,

Een vraagje ... is het mogelijk (en zo ja hoe) om via een regex dubbele tekens af te keuren?

Wat ik graag zou willen is dat ik bijv. kan aangeven dat er letters en cijfers gebruikt mogen worden, en spaties, punten en streepjes. Dan krijg je zoiets:

pattern="^[- .0-9A-Za-z]$"

Maar ik wil niet dat men dubbele spaties, streepjes en punten kan gebruiken.

Dus dit mag wel: Ozzie.PHP-Hulp
Maar dit niet: Ozzie..PHP--Hulp

Is het mogelijk om in een regex aan te geven dat er alleen 'enkele' streepjes, spaties en punten gebruikt mogen worden?
Wouter J op 27/12/2016 17:54:50

De lookahead is (?!\1|$) oftewel: Niet \1 of $. Dus niet het einde van de string. Dat is precies wat je wou, toch?

Wouter (of iemand anders). Nog een heel korte vraag.

Met (?!$) geef ik aan dat het niet het eind van de string mag zijn. Dit werkt prima!

Ik kan bijv. (?:-(?!$)) gebruiken om aan te geven dat er een streepje staat, maar dat het niet het einde van de string mag zijn.

In het eerste deel van (?:-(?!$)) geef ik met ?: aan dat het om een non-capturing group gaat.

Kan ik nu in de 2e capturing group (?!$) ook aangeven dat het om een non-capturing group gaat? Als ik dat probeer met (?:?!$) dan werkt het niet :-s

Ik kan bijv. (?:-(?!$)) gebruiken om aan te geven dat er een streepje staat, maar dat het niet het einde van de string mag zijn.

Heb je t getest? Naar mijn idee wel. Al is die group hier niet ech tnodig: -(?!$)

Kan ik nu in de 2e capturing group (?!$) ook aangeven dat het om een non-capturing group gaat? Als ik dat probeer met (?:?!$) dan werkt het niet :-s

(?!...) is geen capturing group, (...) is. Deze syntaxes gaan niet over het zelfde.
>> Heb je t getest? Naar mijn idee wel. Al is die group hier niet ech tnodig: -(?!$)

Ja, ik heb het getest ... dat werkt dus prima zoals ik één regel daarboven zei :-)
Die groep heb ik erbij staan omdat het (in mijn praktijk) een optionele groep is die volgt op iets anders.

>> (?!...) is geen capturing group, (...) is. Deze syntaxes gaan niet over het zelfde.

Ik denk dat ik het snap. Ik dacht dat iedere group standaard een capturing group was, en dat ik dus moest aangeven dat dit een non-capturing group betrof zoals jij mij eerder had geleerd. Maar dat hoeft in dit geval dus niet.
Die groep heb ik erbij staan omdat het (in mijn praktijk) een optionele groep is die volgt op iets anders.

Oeps sorry. Las t als "Kan ik bijv." ipv "Ik kan bijv." :)

Ik denk dat ik het snap. Ik dacht dat iedere group standaard een capturing group was, en dat ik dus moest aangeven dat dit een non-capturing group betrof zoals jij mij eerder had geleerd. Maar dat hoeft in dit geval dus niet.

T klopt wel wat je zegt: Elke groep is standaard een capturing group. Maar (?...) is vaak geen groep. De (?!...) definieert het geen erin zit niet als een groep, het is puur een lookahead. Aangezien je in regex elke character die gebruikt wordt als syntax moet escapen (bijv. \( om een ( te matchen) is het handig om zo min mogelijk characters te gebruiken voor regex syntax. Als dat niet het geval was zou (?!...) net zo goed <?!...> kunnen zijn oid.
>> Oeps sorry. Las t als "Kan ik bijv." ipv "Ik kan bijv." :)

No problem ;-)

>> Aangezien je in regex elke character die gebruikt wordt als syntax moet escapen (bijv. \( om een ( te matchen) is het handig om zo min mogelijk characters te gebruiken voor regex syntax.

Kun je dit nog wat verder uitleggen? Ik snap niet echt wat je hiermee bedoelt eigenlijk :-s

Reageren