Regex, dubbele tekens vermijden?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Medior PHP Developer Zend

Voor een van mijn businesspartners in de regio Veenendaal ben ik op zoek naar een medior PHP developer. Organisatie Dit bedrijf is 30 jaar geleden ontstaan als speciaal systeem voor campings om kerstkaarten geautomatiseerd naar hun gasten te sturen. Op dit moment zijn ze uitgegroeid tot een organisatie met 50 medewerkers waarvan 10 op de IT afdeling. Hun software verzendt inmiddels ook geen kerstkaarten meer. Tegenwoordig zijn de grotere recreatie en vakantieparken als bijvoorbeeld Duinrell gebruikers van hun software. Zij focussen zich volledig op de recreatiebranch en de software zorgt er voor dat wanneer er een reservering wordt gemaakt dat

Bekijk vacature »

Senior PHP Developer Zend

Voor een van mijn businesspartners in de regio Veenendaal ben ik op zoek naar een senior PHP developer. Organisatie Dit bedrijf is 30 jaar geleden ontstaan als speciaal systeem voor campings om kerstkaarten geautomatiseerd naar hun gasten te sturen. Op dit moment zijn ze uitgegroeid tot een organisatie met 50 medewerkers waarvan 10 op de IT afdeling. Hun software verzendt inmiddels ook geen kerstkaarten meer. Tegenwoordig zijn de grotere recreatie en vakantieparken als bijvoorbeeld Duinrell gebruikers van hun software. Zij focussen zich volledig op de recreatiebranch en de software zorgt er voor dat wanneer er een reservering wordt gemaakt dat

Bekijk vacature »

Medior Full-Stack Developer (1 platform, duizenden

Organisatie Je komt te werken in een bedrijf wat nu 15 jaar bestaat. Wat begon als een studentproject van 4 man is inmiddels uitgegroeid tot een organisatie waar 40 mensen werken. Ze zijn gespecialiseerd in het ontwikkelen voor software voor de accountancy. Inmiddels maakt 8% van alle MKB bedrijven in Nederland gebruik van hun software die zowel op de desktop als mobiel werkt. Doordat alles binnen dit bedrijft wordt ontwikkeld en ontworpen wordt alle feedback en input gewaardeerd. Binnen het bedrijf hangt een open en gezellige sfeer. Zo wordt er samen geluncht en als je zin hebt kan je daarnaa

Bekijk vacature »

Junior PHP Developer Maatwerk Applicatie

Voor een van mijn businesspartners in de regio Amersfoort ben ik op zoek naar een junior PHP developer. Organisatie In 1999 is dit bedrijf ontstaan om er voor te zorgen dat een (voor toen) nieuwe communicatiemethode, namelijk de email. Volledig kon worden geautomatiseerd. Inmiddels zijn ze uitgegroeid tot internationale organisatie die intercontinentaal marktleider is op het gebied van email automation. In nederland zijn er in totaal 38 mensen werkzaam die elke dag voor hun klanten er voor zorgen dat alles op rolletjes verloopt. Dit doen ze voor internationale merken als Heineken en TUI maar bijvoorbeeld ook het MKB segment. Binnen

Bekijk vacature »

C# Full Stack Developer

Functie: Full-Stack Developer Locatie: Westland Salaris: € 4.250,- bruto per maand maximaal Dienstverband: Werving & Selectie Werkweek: 40 uur per week Functie omschrijving Als Full-Stack Developer ben je met een team bezig met het verbeteren van bestaande en nieuwe applicaties welke gebruikt worden binnen de land- en tuinbouw (denk aan energiezuinige klimaatcomputers, waterbesparende innovaties of andere geavanceerde oplossingen). Daarnaast ontwikkel je verschillende services en help je de productmanager met het verbeteren van de kwaliteit van de producten van de opdrachtgever. Je taken zijn: Definiëren en implementeren van innovatieve stappen; Doorontwikkelen en opzetten van bestaande en nieuwe Azure Cloud services; Aanbrengen

Bekijk vacature »

Talentvolle Junior PHP Developer

Organisatie Voor een van mijn businesspartners in de regio Utrecht ben ik op zoek naar een talentvolle PHP developer. De organisatie is tussen 2004 en 2006 ontstaan in het pre Symfony tijdperk. Ze hebben toen ook hun eigen framework ontwikkeld. Ze hebben speciale software ontwikkeld die vooral gericht is op de medische sector om medicatie voor te schrijven. Het bedrijf bestaat nu uit 30 werknemers. Ze zitten op een centraal gelegen locatie die goed bereikbaar is met de auto en het OV. Binnen het bedrijf zelf hangt een sfeer waar iedereen goed met elkaar om gaat en op een hoog

Bekijk vacature »

Young Professional Front-end Developer

Jij weet wat er nodig is. Jouw hart gaat sneller kloppen van techniek. Jij wil vooruit. Vacature Front-end Developer per 1-7-2019 Je bent creatief, thuis in gebruikersinteractie en een gedreven developer in hart en nieren. Daarnaast heb jij een klantgerichte en proactieve houding. Precies de kwaliteiten die een Front-end Developer nodig heeft. Aan de slag als Young Professional Front-end Developer Als Front-end Developer werk je aan de technische realisatie van front-end (web)applicaties in de verschillende uitdagende opdrachten voor Sogeti’s klanten. Dit kan zowel op klantlocatie zijn, als intern bij Sogeti. Jij houdt van het uitdenken en implementeren van responsive (web)

Bekijk vacature »

digitaal specialist

Wat ga je doen? Als digitaal specialist concentreer je je op de opsporing van strafbare feiten in de digitale omgeving. Je ondersteunt bij complexe onderzoeken met het doorzoeken van woningen en bedrijven en het veiligstellen van informatie uit netwerken. Hierbij werk je veelal met vastgestelde forensische tools. Je verzamelt, combineert en analyseert gegevens uit diverse digitale bronnen en herkent trends en afwijkende patronen die reden zijn voor verder onderzoek. Soms moeten grote hoeveelheden data in korte tijd onderzocht worden. Je bent intermediair tussen de digitale techniek en de recherche en je adviseert over een effectieve aanpak. Oftewel, je vormt de

Bekijk vacature »

Innovatieve Junior/Medior PHP Developer

Organisatie Midden in het centrum van Breda staat een groot kantoorpand, waar hard gewerkt wordt om een groeiend platform internationaal uit te breiden. Op dit moment is dit bedrijf actief in Nederland, België, Spanje en UK. Zij bestaan nog niet zo vreselijk lang maar dit project staat intern bekend als innovatief en baanbrekend, er is weinig concurrentie in de markt en weten zichzelf te onderscheiden doordat ze een breed aanbod hebben. De organisatie bestaat uit 60 medewerkers. Het Ontwikkel team bestaat op dit moment uit 2 ontwikkelaars en een product Owner. Vanuit het team is er veel vertrouwen in de

Bekijk vacature »

Full Stack .NET Developer

Requirements You have at least 3 years work experience with; ASP.NET MVC; JavaScript; HTML / CSS; TypeScript experience is preferred, but is not a requirement; Clear codes and patterns; Fluent in the English language (written and spoken); You are energetic, ambitious and proactive; Attention to detail; Available for 32 to 40 hours per week. Living in The Netherlands or willing to relocate (we will provide visa and work permit) Technology that you will be working with: ASP.NET MVC 5, C # 7.2, Microsoft SQL Server, Redis, NHibernate, Fluent NHibernate, Ninject, SharePoint CSOM, Office 365, ADFS, Exchange Web Services, PowerBI; TypeScript,

Bekijk vacature »

Oracle Apex Ontwikkelaar

Wat je gaat doen: Als Oracle Ontwikkelaar werk je zowel zelfstandig als in teamverband aan het ontwikkelen en ontwerpen van software componenten. Je levert een bijdrage aan de ontwikkeling tot en met de implementatie. Je bent in staat om informatie te verzamelen,te analyseren en te documenteren van wensen en eisen van de eindgebruikers. Je bent in staat om functionele vereisten te vertalen naar technische specificaties, ontwikkelt web applicaties met behulp van Oracle Applicatie Express, door de veranderingen en ontwikkelingen van web formulieren en rapporten. Verbeteren van bestaande Oracle Apex Systemen. Ontwikkelen en veranderen van Oracle 11g database schema’s. Schrijven van

Bekijk vacature »

kwaliteitsmedewerker lokale ondersteuning

Wat ga je doen? De kerntaak van Lokale ICT-ondersteuning is het realiseren van de gecontracteerde dienstverlening aan de business. Het team werkt als oplosgroep binnen de ketens van werkplek-, netwerk- en mobiele diensten. Hierbij is LO verantwoordelijk voor de werkplekken en randapparatuur van de politie, die door de Dienst ICT worden beheerd. Als kwaliteitsmedewerker stem je de te leveren dienstverlening af met dienstenmanagers. Je bent verantwoordelijk voor de borging van één of meerdere ICT-diensten (wifi, chromebooks, werkplekken, etc.) binnen Lokale ICT-ondersteuning, zodat deze op uniforme wijze kan worden uitgevoerd. Je bent intermediair tussen projectleiders en de verschillende regioteams LO voor

Bekijk vacature »

Medior PHP Developer

Organisatie Voor onze partner gevestigd te Haarlem zoeken we een medior PHP developer. Deze organisatie is in 2001 opgericht op een zolderkamer en uitgegroeid tot de grootste full service digital agency met ruim 60 getalenteerde werknemers daar in de regio. Wegens de vele jaren ervaring is er veel ruimte om nieuwe technieken te ontdekken en aan complexe projecten te werken. Elke klant wordt perfect bediend om de beste applicaties, marketing strategieën, campagnes en designs voor ze te ontwikkelen. Hierbij kom je voor grote A-merken gaan werken. Naast het ontwikkelen van applicaties en complexe websites hebben ze inhouse ook een eigen

Bekijk vacature »

Oracle Middleware Developer

Wat je gaat doen: Wij zijn op zoek naar een Oracle Middleware Developer met kennis van/ervaring met onder andere SOA Suite 10G en/of SOA Suite 11G, WebLogic, BPEL Orchestration, Java, SOAP. Je bent bekend met de integratie laag gebaseerd op Oracle SOA Suite 10G. Als Middleware developer ben je verantwoordelijk voor de ontwikkeling van integratie tussen de diverse applicaties in het landschap, en de communicatie tussen de klant en andere stakeholders. Je werkt samen met het applicatie team, zoals functioneel ontwerpers en andere ontwikkelaars om de oplossing verder te ontwikkelen en te implementeren. Je collega’s werken onder andere met technieken

Bekijk vacature »

Technisch Ontwerper / Applicatieontwikkelaar max.

Uitdagende projecten, afwisseling, de zekerheid van een vast contract en groei is wat CIMSOLUTIONS jou onder andere biedt. Benieuwd hoe wij dit aanpakken? Kom op woensdag 17 april naar ons ICT Professional Event, op 7 locaties in Nederland. Tijdens deze avond kun je naast een hapje en een drankje onze sfeer komen proeven. Maak kennis met CIMSOLUTIONS, onze collega’s en beleef de ervaringen van onze ICT specialisten én de projecten waar zij het verschil maken. Kijk voor meer informatie en/of aanmelden op: https://www.cimsolutions.nl/nl/Evenement/CIMSOLUTIONS-ICT-Professionals-Event Wie zoeken we? Je bent de beste in je vak of hebt de ambitie en de potentie

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

25/04/2019 04:54:43
Honeypot
 
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.