Regex, dubbele tekens vermijden?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Web based C# developer regio Veenendaal

Momenteel ben ik op zoek naar een creatieve software ontwikkelaar die ervaring heeft met C# en web based applicaties. Je gaat werken bij een organisatie dat doormiddel van diverse systemen en automatiseringen ervoor kan zorgen dat de administratie van verschillende multinationals efficiënter en effectiever wordt. Deze organisatie telt wereldwijd meer dan 3000 medewerkers en ze hebben diverse vestigingen over de gehele wereld. Ondanks het feit dat ze internationaal werken en meer dan 3000 medewerkers hebben is het een erg dynamisch organisatie en krijg je als software developer enorm veel uitdagende werkzaamheden. Je gaat werken bij een organisatie dat zich focused

Bekijk vacature »

Medior/Senior Back-End .NET Developer

Organisatie Heb jij altijd eens willen werken voor een online mediahuis met miljoenen bezoekers per maand? Waarbij jij in een klein en innovatief team werkt die zich constant verbeteren en hierdoor ook marktleider zijn. De interne nadruk van dit bedrijf ligt volledig op personeelsontwikkeling, denk aan een Facebook/Google-achtige manier. Iedere week zijn er speciale blokken ingericht waarbij jij jezelf verder ontwikkelt, daarnaast ga je langs bij high-end organisaties die met een state of the art .NET omgeving werken om nog meer ervaringen op te doen. Had ik al gezegd dat er regelmatig programmeurs van Google over de vloer komen? Functie

Bekijk vacature »

Developer / GIS / Esri / Ingenieursbureau

Functieomschrijving Ben jij een Software Developer met minimaal drie jaar ervaring en wil jij aan werken aan toonaangevende GIS software? Spreekt het jou aan om binnen een innovatief ingenieursbureau te werken aan uiteenlopende projecten voor diverse grote en bekende namen in Nederland? Lees dan nu verder! Ontwikkelen van nieuwe GIS software met behulp van Esri; Ontwikkelen en bedenken van nieuwe koppelingen en mobiele oplossingen; Werken aan uiteenlopende projecten voor grote en bekende organisaties in Nederland; Samenwerken in zelfsturende Agile teams; Werken aan innovatie en kennisdeling. Functie-eisen Minimaal HBO en/of WO werk- en denkniveau; Minimaal 3 jaar ervaring als Developer met

Bekijk vacature »

Junior C# .NET ontwikkelaar met focus op artificia

Organisatie Als junior ASP.NET ontwikkelaar ga je werken bij een vooruitstrevende organisatie die complexe software ontwikkeld op het gebied van consumentengedrag. Deze organisatie geeft door middel van grote hoeveelheden data inzicht in de gehele route die een consument bewandelt tijdens zijn/haar aankoop. Binnen deze software komen drie grote pijlers samen namelijk; Big Data, Retail en de kennis van techniek. Deze software wordt binnen Nederland onder andere uitgerol bij stations, vliegvelden en shoppingcentra. De continue toenemende concurrentie in de retail heeft als gevolg dat dit inzicht steeds belangrijker wordt voor de retailsector. Innovatie en het persoonlijke aspect staat centraal binnen de

Bekijk vacature »

Medior Front-End developer die de lijnen gaat uitz

Vacature Omschrijving De webwinkel heeft maandelijks 550.000 unieke bezoekers. Sinds 2008 worden ze keer op keer verkozen tot ‘Beste Webwinkel’ in de categorie ‘Computer, hard- & software’ bij de Nationale Thuiswinkel Awards en de Webshop Awards. Daarnaast hebben ze dit jaar, net als in 2010, de overall publieksprijs ‘Beste Webwinkel van Nederland’ in ontvangst mogen nemen. Een bedrijf dat altijd voor het hoogst haalbare gaat. Ze zijn een bedrijf met veel jonge en ambitieuze medewerkers en een bijzondere bedrijfscultuur. Ons team van meer dan 200 mensen werkt hard om onze leidende positie te behouden en te verstevigen. We werken vanaf

Bekijk vacature »

Java Developer / Java EE frameworks / Inhouse (Clo

Functieomschrijving Ben jij een Java Developer met een zeer uitgebreide kennis van REST API's en wil jij graag werken aan uitdagende Inhouse projecten voor grote en bekende partijen in Nederland? Dan is dit de rol waarnaar jij op zoek bent! Binnen deze rol zal jij je als Java Developer aan de slag gaan voor een van de meest bekende bureaus op het gebied online platformen, een rol met veel afwisseling en voldoende technische uitdaging! Werken aan diverse en uiteenlopende projecten, waarbij je meer dan eens pionierswerk zal moeten verrichten; De mogelijkheden tot het toepassen van nieuwe technieken bespreken, beoordelen en

Bekijk vacature »

PHP Test Engineer gezocht!

Vacature Omschrijving Onze klant is een succesvolle speler in de verzekeringsbranche, met diverse producten, merken en platformen. Met meer dan 150 collega’s is de organisatie elke dag bezig om de kwaliteit te verbeteren en het leuker te beter voor haar klanten. Het kantoor is gevestigd in de buurt van Rotterdam en is goed bereikbaar met de auto, het ov en de fiets. Het is een informele organisatie, waarin je de vrijheid hebt om ideeën aan te dragen. Functieomschrijving Als Test engineer zorg je ervoor dat bedrijf kritische processen bij deze mooie organisatie automatisch worden getest. Je werkt actief mee aan

Bekijk vacature »

Junior .NET Programmeur

Organisatie De organisatie is een dynamisch bedrijf dat zich focust op dienstverlening. De core bussiness is het ontwikkelen en optimaliseren van innovatieve software oplossingen voor de overheid en het bedrijfsleven. Er word met een topteam van 10FTE gewerkt aan de meest innovatieve oplossingen. Zeven van de tien werknemers zijn IT’er en de rest houdt zich bezig met de randzaken: sales en HR. Samen met haar partners kijkt het bedrijf hoe er op een nog innovatievere manier gegevens kunnen worden gevisualiseerd en geïmplementeerd. Ze zijn er bij deze organisatie van overtuigd het integraal ontsluiten van gegevens sneller, goedkoper, veiliger en kwalitatief

Bekijk vacature »

Senior .NET Developer / Innovator / Disruptor

Organisatie Direct bij binnenkomst word je gegroet door vrolijke baliemedewerkster. Jij loopt door de open gangen door naar de ontwikkelaarsruimte. Hier staat de dampende koffie op je bureau al op jouw te wachten. Je bent iets vroeger aangekomen, dus jij begroet de rest van jouw team ook bij binnenkomst. Jullie zijn namelijk écht een hechte club! Als losse start-up binnen de grote moederorganisatie waar jullie deel van uit maken zien jullie jezelf ook als innovators en disruptors (denk Billy Beane in Moneyball). Iedere dag zijn jullie als team bezig om grote veranderingen door te voeren binnen de financiële branche! Jouw

Bekijk vacature »

Medior PHP Developer

Organisatie Voor een groeiend E-commerce bedrijf in Eindhoven zoek ik een Medior PHP Developer die samen in een team van ontwikkelaars gaat bouwen aan supersterke websites en webshops. Het bedrijf is ontstaan vanuit een ICT bedrijf, de eigenaar is zelf een ontwikkelaar en samen met de organisatie hebben ze hun 15 jarige jubileum recent gevierd. Functie Projecten waar je aan gaat werken hebben een doorlooptijd van ongeveer 6 tot 9 maanden voordat de website of webshop live gaat. Je komt te werken in een hechte club ontwikkelaars die zich dagelijks inzetten om de vetste websites en webshops te realiseren voor

Bekijk vacature »

Medior .NET developer / Medische sector /

Werk jij graag bij een unieke organisatie die marktleider is binnen de branche? Vind jij maatschappelijk verantwoord ondernemen belangrijk? Wil jij als individu echt impact maken met jouw werkzaamheden? En wil jij graag werken met de nieuwste technieken en frameworks? Zoek dan niet verder, want dan ben ik op zoek naar jou! De organisatie ‘Wij willen graag gezien worden als een echt familiebedrijf, maar wel een familie met ambitie en passie voor het werk’. Je bent hier geen nummer, maar echt onderdeel van het team. Je gaat werken met de nieuwste software binnen de zorgsector, waarbij jij op een maatschappelijk

Bekijk vacature »

Fullstack .NET developer, nieuwbouw (.NET Core, An

Ben je een .NET developer die in de Hoeksche Waard woont of in de buurt hiervan en je wilt graag dichter bij huis werken? Bij een bedrijf waar gewerkt wordt met technieken als .NET Core, Angular en Azure? Binnen een familiair, succesvol en stabiel bedrijf? Met onder meer 29 vrije dagen, winstdeling en de mogelijkheid tot thuiswerken? Lees dan verder. Dit bedrijf richt zich op de ondersteuning van adviseurs op het gebied van wetgeving binnen specifieke branche middels een kennisbank, helpdesk, cursussen en software. De complexe wetgeving vertalen ze in softwarepakketten die hun klanten bij hun afnemen. Daarnaast maken ze

Bekijk vacature »

Junior+ / Medior Full-stack .NET Developer

Organisatie Voor een van mijn business partners in de regio Tilburg ben ik op zoek naar een full-stack medior .NET developer. Je zal komen te werken voor de marktleider binnen de branche en je klantenkring zal onder andere bestaan uit gerenommeerde bedrijven uit de staal- en raketindustrie. Grote spelers, met grote behoefte. Hier ga jij op in spelen door de bestaande producten te verbeteren en nieuwe te ontwikkelen. Functie Je komt namelijk te werken binnen de R&D afdeling. Hierbinnen kom je te werken binnen een dedicated scrum team, met sprints van 3 weken, scrummen zoals het ooit bedoeld is. Daarnaast

Bekijk vacature »

.NET Developer/Consultant gezocht voor security vr

Functieomschrijving Wil jij een combinatie van complexe security projecten, klanten adviseren en dat terwijl je 2 dagen per week thuis kan werken? Lees dan nu verder! Functionele requirements vertalen naar technische oplossingen en deze zelf ontwikkelen; Klanten pro-actief adviseren over innovatieve software-oplossingen; Adviseren en ontwikkelen in lijn met de strategie en doelen van de klant; Technische ontwerpen opstellen; Begeleiden van ingebruikname van het product. Functie-eisen Afgeronde HBO/WO opleiding richting bijvoorbeeld Informatica is een sterke pré; Enkele relevante certificeringen; Aantoonbare werkervaring als developer, en hebt hierbij bovenmatige interesse in security vraagstukken; Ervaring als consultant is geen eis, wel is het prettig

Bekijk vacature »

.NET/ C# SharePoint ontwikkelaar gezocht in omgevi

Vacature Omschrijving Voor een klant zijn wij op zoek naar een .NET/ C# ontwikkelaar die graag met SharePoint wilt werken. Het bedrijf bestaat uit 25 werknemers waarvan 4 ontwikkelaars, met een specialisatie in het digitaliseren van bedrijfsprocessen. Hierbij moet je vooral denken aan document management dat ervoor zorgt dat post geregistreerd wordt, het onderhouden van kwaliteitssystemen en handboeken die gestructureerd worden. De softwarepakketten die het bedrijf aan haar klanten levert zijn Cloud-based en gericht op SharePoint. De eindgebruiker staat hierbij altijd centraal, waardoor jij ervoor moet zorgen dat de focus ligt op de mensen die gebruik gaan maken van de

Bekijk vacature »

Pagina: 1 2 volgende »

Ozzie PHP

Ozzie PHP

26/12/2016 16:17:01
Quote Anchor link
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?
 
PHP hulp

PHP hulp

22/08/2019 18:43:17
 
Adoptive Solution

Adoptive Solution

26/12/2016 18:26:06
Quote Anchor link
Deed dit :

http://www.google.nl/search?q=php+regex+remove+duplicate+characters

Deze bevat de oplossing :

http://stackoverflow.com/a/10342485

Paste het wat aan :

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

$n
= 'Ozzie..PHP--Hulp';

echo '<p>' . $n . '</p>';

$n = preg_replace('/([\.-\s])\\1+/', '$1', $n);

echo '<p>' . $n . '</p>';

?>
Gewijzigd op 26/12/2016 18:27:31 door Adoptive Solution
 
- SanThe -

- SanThe -

26/12/2016 18:37:22
Quote Anchor link
Adoptive Solution op 26/12/2016 18:26:06:
Paste het wat aan :

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

$n
= 'Ozzie..PHP--Hulp';

echo '<p>' . $n . '</p>';

$n = preg_replace('/([\.-\s])\\1+/', '$1', $n);

echo '<p>' . $n . '</p>';

?>


Bron output hier: <p>Ozzie..PHP--Hulp</p><p></p>
 
Adoptive Solution

Adoptive Solution

26/12/2016 18:56:20
Quote Anchor link
Grappig, op m'n Mac doet ie het wel, op m'n NAS niet.

Wel, Ozzie heeft vastwel een 'goed basisboek' waar het in staat hoe je het doet.

Toevoeging op 26/12/2016 19:30:22:

Ik heb geen goed boek, moest dus even in mijn eigen archief bladeren.

Dit moet het wel goed doen :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php

$string
= 'Oz    zie.....PHP----Hulp';

echo '<p>' . $string . '</p>' . PHP_EOL;

$patterns = array();
$patterns[0] = '/\.+/';
$patterns[1] = '/-+/';
$patterns[2] = '/\s+/';

$replacements = array();
$replacements[0] = '.';
$replacements[1] = '-';
$replacements[2] = ' ';

echo '<p>' . preg_replace($patterns, $replacements, $string) . '</p>' . PHP_EOL;

?>


http://adoptive.esy.es/remove-double.php
 
Ozzie PHP

Ozzie PHP

26/12/2016 21:25:48
Quote Anchor link
Ik geloof dat jullie me verkeerd begrepen hebben :-s

De vraag is hoe ik dus een negatieve match krijg. Er hoeft niks vervangen te worden. De regex moet simpelweg niet slagen als er .. of -- of dubbele spatie in staat.

Ik denk dat ik het maar ga oplossen met lookaheads.

Toevoeging op 26/12/2016 21:27:04:

PS

>> Wel, Ozzie heeft vastwel een 'goed basisboek' waar het in staat hoe je het doet.

Wat was de bedoeling van die opmerking?
 
Wouter J

Wouter J

26/12/2016 22:44:51
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php

$pattern
= '/
  ^
  (?:
    [[:alnum:]] # letters + cijfers
    |
    (?:
      ([.\s-])  # punt, spatie en streepje
      (?!\1)    # niet gevolgt door hetzelfde teken
    )
  )+
  $
/x'
;

$tests = ['Ozzie..PHP--Hulp', 'Ozzie.PHP-Hulp', 'a.b.c.'];

foreach ($tests as $t) {
    if (preg_match($pattern, $t)) {
        echo 'OK '.$t.PHP_EOL;
    }
else {
        echo 'NO '.$t.PHP_EOL;
    }
}


?>


Dit staat bijv. "Ozzie.-PHP-Hulp" wel toe, als dat ook niet mag wordt de pattern:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$pattern
= '/
  ^
  (?:
    [[:alnum:]]     # letters + cijfers
    |
    (?:
      [.\s-]        # punt, spatie en streepje
      (?:[^.\s-]|$) # gevolgt door of een *niet* punt, spatie, streepje of het einde van de string
    )
  )+
  $
/x'
;
?>
Gewijzigd op 26/12/2016 22:45:09 door Wouter J
 
Ozzie PHP

Ozzie PHP

26/12/2016 23:22:23
Quote Anchor link
Thanks Wouter, daar moet ik wel wat mee kunnen!

Wat doet nu precies die "?:" ?

Toevoeging op 26/12/2016 23:32:02:

Dit stukje ?:[[:alnum:]] werkt bij mij alleen als ik het zo doe

?:[0-9A-Za-z]

Dus zonder die dubbele blokhaken. Heb je toevallig enig idee waarom? Ook zie ik geen verschil als ik in dit stukje ?: weglaat. Het resultaat lijkt dan gewoon hetzelfde te zijn.

(PS ik gebruik het als een pattern in een html5 input-veld)
 
Ben van Velzen

Ben van Velzen

27/12/2016 00:01:07
Quote Anchor link
?: zorgt ervoor dat de capture group niet wordt opgeslagen, zie de resulterende array wanneer je preg_match gebruikt.
 
Ozzie PHP

Ozzie PHP

27/12/2016 00:03:49
Quote Anchor link
Ben van Velzen op 27/12/2016 00:01:07:
?: zorgt ervoor dat de capture group niet wordt opgeslagen, zie de resulterende array wanneer je preg_match gebruikt.

Wat is daarvan precies (wel of juist niet) het nut?

Ik wil dus enkel valideren (html5 input pattern) of iemand iets geldigs heeft ingevuld.
 
Wouter J

Wouter J

27/12/2016 00:04:56
Quote Anchor link
Quote:
(PS ik gebruik het als een pattern in een html5 input-veld)

Dat verklaard het [[:alnum:]] stukje :) HTML5 input velden gebruiken de JavaScript regex engine. Deze ondersteund geen speciale character classes zoals [:alnum:] (wat gewoon een short-hand is voor [\w\d] in PHP).

Quote:
Wat doet nu precies die "?:" ?

Normaal gesproken wordt een capture group "gecaptured" (opgeslagen). Dit betekend dat we er later weer naar kunnen referreren doormiddel van zijn index. Bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
preg_match('/(a)(b)(c)/', 'abc');
/* Capture groups:
 1: a
 2: b
 3: c */

Deze indexen kun je dan weer gebruiken in de regex. Bijvoorbeeld /([a-z])\1/ zal 2 keer dezelfde letter achter elkaar matchen.

Dit opslaan van de capture group kost wat geheugen en wat tijd. Door (?:...) ipv (...) te gebruiken vertel je dat de capture group niet opgeslagen moet worden. Op deze manier wordt je regex iets sneller. Dit is waarschijnlijk vooral pas merkbaar bij grote hoeveelheden matchen, dus in dit geval een grote lengte van de string.

Zie ook http://www.regular-expressions.info/brackets.html , een hele handige site voor informatie over alle syntaxen in regex en het optimaliseren daarvan.
Gewijzigd op 27/12/2016 00:07:01 door Wouter J
 
Ozzie PHP

Ozzie PHP

27/12/2016 00:16:24
Quote Anchor link
Ah zo ... dan kan ik dus beter overal die ?: toepassen. Weer wat geleerd :-)

Nog een laatste vraag.

Nog even uitgaande van die voorgaande regex ...

Dit stukje (?:[^.\s-]|$) vond ik op zich wel mooi ... dat je dus ook niet bijv. .- kunt krijgen. Het nadeel is nu echter dat je ipv .- wel bijv. een vreemd teken kunt zetten bijv .* wat ik eigenlijk niet wil. Is dat nog (makkelijk) op te lossen?

Idealiter zou ik (ongeveer) dit willen:

BEGIN en EINDIG de string met een letter of getal. Daartussen zijn de enige toegestane karakters letters en cijfers en de volgende vreemde tekens: spatie streepje punt ... maar die mogen niet na elkaar volgen, met als enige uitzondering een punt die wél gevolgd mag worden door een spatie. Heb je daar nog een tip voor hoe ik dat moet aanpakken?

Dit mag:
Ozzie PHPhulp
Ozzie.PHP-hulp
Ozzie. PHP-hulp

Maar dit mag niet:
.Ozzie (begint niet met een letter of getal)
Ozzie- (eindigt niet met een letter of getal)
Ozzie.-PHPhulp (punt en streepje na elkaar mag niet)
 
Wouter J

Wouter J

27/12/2016 00:39:42
Quote Anchor link
Oh, maar die begin en eindig met een letter of getal maakt t een stuk makkelijker:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
/^[a-zA-Z0-9](?:[a-zA-Z0-9]|[.\s\-a-zA-Z0-9][a-zA-Z0-9])*$/

Oftewel: Een alnum, gevolgd door of een alnum of een speciaal teken die op zijn minst weer wordt gevolgd door een alnum. En dat laatste dan 0 of meer keer. Misschien iets leesbaarder in een parsing grammer syntax:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
String         <- Alnum AlnumOrSpecial*
AlnumOrSpecial <- Alnum / (Special Alnum)
Alnum          <- [a-zA-Z0-9]
Special        <- [-. ]
Gewijzigd op 27/12/2016 00:40:24 door Wouter J
 
Ozzie PHP

Ozzie PHP

27/12/2016 00:59:33
Quote Anchor link
Ah, zo ja. Nice! Dat is inderdaad precies wat ik bedoelde. Thanks very much :-)

Toevoeging op 27/12/2016 01:32:24:

PS

Kan ik dit

(?:[a-zA-Z0-9]|[.\s\-a-zA-Z0-9][a-zA-Z0-9])*

ook vervangen door

(?:[.\s\-]?[a-zA-Z0-9])*

En zo ja, is het een beter dan het ander of maakt dat niks uit?
 
Wouter J

Wouter J

27/12/2016 10:36:12
Quote Anchor link
Ja, dat kun je veranderen. En ik zou zeggen dat de eerste wellicht wat sneller zou zijn, aangezien de tweede een geneste optional quantifier heeft (? en *). Hierdoor moet de engine in het geval van een non-match veel backtracking toepassen, wat het geheel trager zou maken.

Maar voor simpele HTML5 input validatie is dat allemaal over-optimalisatie. En zou dan wel voor jouw optie kiezen, een stuk leesbaarder naar mijn idee.
 
Ozzie PHP

Ozzie PHP

27/12/2016 12:22:30
Quote Anchor link
Wouter, thanks.

Ik wil eigenlijk toch terug naar de eerste variant die jij had voorgesteld. Dus geen dezelfde vreemde tekens achter elkaar, maar verschillende vreemde tekens achter elkaar mag wel.

Dus niet 2x een spatie achter elkaar maar een punt en een spatie mag bijvoorbeeld wel.

Ik vond dit zelf wel een hele toffe oplossing van jou:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
([.\s-])  # punt, spatie en streepje    
(?!\1)    # niet gevolgt door hetzelfde teken

Het enige nadeel is nu dat ik na een punt, streepje of spatie een gek teken kan zetten. Je zou dus bijvoorbeeld .* kunnen doen, terwijl een sterretje niet is toegestaan.

Wat ik dus zou willen, is dit:

We hebben vreemde tekens: [.\s-]
En cijfers en letters: [0-9a-zA-Z]

Cijfers en letters mogen gewoon achter elkaar. Geen enkel probleem.

Maar een vreemd tegen moet gevolgd worden door óf een cijfer of letter óf een ANDER vreemd teken.

Is dat op een handige manier te doen? Het mooiste zou zijn als je kunt zeggen ... een vreemd teken moet gevolgd worden door [.-\s0-9a-zA-Z] maar dan zonder datzelfde vreemde teken. Ik kan wel voor ieder vreemd teken een aparte groep maken waar dat teken door gevolgd moet worden, maar dan wordt de regex zo enorm lang (in de praktijk zijn het zelfs nog een paar meer vreemde tekens).

Maar goed, dus even samengevat.

Cijfers en letters mogen elkaar gewoon opvolgen, maar een vreemd teken mag niet door datzelfde vreemde teken worden gevolgd, maar wel door een ander vreemd teken of een cijfer of letter.

Weet je daar nog iets voor? Dat zou geweldig zijn.
 
Wouter J

Wouter J

27/12/2016 16:28:35
Quote Anchor link
Look arounds zijn zero-length assertions. Deze worden dus wel gematched, maar zorgen dus niet voor het consumen van de gematchde string. Dus /^(?:(\w)(?!\1))+$/ zal een string matchen als deze volledig bestaat uit woord tekens (de \w) terwijl deze niet opgevolgd worden door hetzelfde teken (het (?!\1) gedeelte).

Dus ([.\s-])(?!\1) matched alleen de punt, spatie of streepje. Niet het teken daarna (het controleert alleen of het teken daarna niet hetzelfde teken is). Dus /^(?:[a-zA-Z0-9]|([.\s-])(?!\1|$))+$/ zal moeten werken naar mijn idee.

https://jsbin.com/jabiloxoju/edit?js,output
 
Ozzie PHP

Ozzie PHP

27/12/2016 16:38:21
Quote Anchor link
Dat ziet er tof uit en daar moet ik wel mee vooruit kunnen.

Ik snap alleen niet waarom "abc." een negatieve match oplevert. Die zou toch moeten kloppen?
 
Wouter J

Wouter J

27/12/2016 17:54:50
Quote Anchor link
De lookahead is (?!\1|$) oftewel: Niet \1 of $. Dus niet het einde van de string. Dat is precies wat je wou, toch?
 
Ozzie PHP

Ozzie PHP

27/12/2016 18:00:51
Quote Anchor link
Ah zo ... misschien dat ie toch wel op een vreemd teken mag eindigen ... maar dan kan ik gewoon |$ weghalen. Dat komt wel goed :-)

Thanks Wouter. Je hebt me weer wat bijgeleerd! :-)
 
Thomas van den Heuvel

Thomas van den Heuvel

28/12/2016 16:25:27
Quote Anchor link
In plaats van a-zA-Z zou je ook simpelweg a-z kunnen gebruiken in combinatie met de /i switch (flag) voor case-insensitive matching.

Mogelijk zou je ook aan een alternatieve oplossing kunnen denken waarbij je niet-legale karakters replaced (maar vermijd blacklists omdat je dan mogelijk niet alle ongewenste gevallen vangt) en dan na afloop deze (potentieel aangepaste) string vergelijkt met het origineel. Indien de twee strings verschillen wil dat zeggen dat er illegale karakters gestript zijn en dus dat de invoer ongeldig was.

Bij het zoeken naar een oplossing ben je niet per definitie beperkt tot de kaders van je regexp. En mogelijk maakt dat het regexp-deel een stuk eenvoudiger ;).
Gewijzigd op 28/12/2016 16:57:36 door Thomas van den Heuvel
 
Ozzie PHP

Ozzie PHP

29/12/2016 13:40:38
Quote Anchor link
>> In plaats van a-zA-Z zou je ook simpelweg a-z kunnen gebruiken in combinatie met de /i switch (flag) voor case-insensitive matching.

Thanks, ik zal dat straks nog eens proberen, hoewel ik meen ergens gelezen te hebben dat dat voor een html5 input pattern niet werkt, maar zeker weten doe ik dat niet meer.

>> Bij het zoeken naar een oplossing ben je niet per definitie beperkt tot de kaders van je regexp. En mogelijk maakt dat het regexp-deel een stuk eenvoudiger ;).

Klopt inderdaad, maar in sommige situaties vind ik een regex wel de "mooiere" oplossing. Vooral omdat het hier echt om een bepaald patroon gaat, en in mindere mate om de vraag 'zit dat teken er wel of niet in'. Maar wat je zegt klopt zeker. Er zijn meerdere mogelijkheden.
 

Pagina: 1 2 volgende »



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.