Regex, dubbele tekens vermijden?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Variatie en uitdaging voor een Medior PHP develope

Binnen deze gezellige en informele club kun je als PHP developer je hart op. Dit omdat men hier diverse projecten heeft draaien voor zowel de firma zelf als wel voor interne en externe klanten. Deze projecten variëren van doorlopende webshops waaraan nieuwe functionaliteiten dienen te worden toegevoegd (frontend en backend) tot diepgaande technische backend applicaties. In totaal werken hier zo’n 30 gemotiveerde werknemers, waarvan ruim 1/3 deel zich specifiek richt op development. Om te zorgen dat jij ultiem tot je recht komt hebben ze een kippenhok voor sales- en marketing- afdeling en een eigen afdeling voor de ontwikkelaars. Functie-omschrijving Lijkt

Bekijk vacature »

Business Developer

Clubprofiel Onze klantrelatie is ICT business partner op het gebied van support en beheer, waarbij de focus ligt op meer dan het oplossen van vraagstukken alleen. Zij willen de klanten continuïteit bieden en meer dan goede service. Werken bij onze klantrelatie betekent onderdeel zijn van een gedreven team professionals. Zij gaan samen voor het beste resultaat. Ze bieden hun klanten continuïteit en meer dan goede service. Jij krijgt training en coaching om jezelf te ontwikkelen. Je komt te werken in een jonge en flexibele organisatie waar veel ruimte is voor eigen inbreng. Bovendien ga je samenwerken met enthousiaste gezellige collega’s

Bekijk vacature »

Android developer - Fintech Amsterdam

Android developer Ben je een ervaren Android developer en wil je graag in de fintech-industrie te komen werken? Aan een Android applicatie met interessante technieken als Kotlin en RxJava? Neem dan contact op! Momenteel ben ik voor een klant in Amsterdam op zoek naar een ervaren Android developer die graag zijn bijdrage wilt gaan leveren aan een greenfield applicatie. De app is onlangs live gegaan, maar er moet nog veel werk gebeuren. Om die reden staan ze ook open voor jou inbreng. Heb jij al ervaring in een financiële omgeving of simpelweg een goed idee, gooi het in de groep!

Bekijk vacature »

Medior .Net Developer Utrecht vanaf €3700,-

Medior .Net Developer Utrecht vanaf €3700,- Wat ga je doen als Medior.Net Developer? Als Medior .Net Developer in Utrecht ben jij verantwoordelijk voor het bouwen van software die verkocht wordt aan de klant. Het is een puur eigen product wat ze bouwen voor zeer grote bedrijven in de olie en gassector. De software zorgt er voor dat mensen veiliger aan de slag kunnen gaan binnen deze sector. Het gaat om hele grote projecten die soms over miljarden gaat. Je zult aan deze projecten werken met de volgende technieken: C#, WCF, WPF, Winforms, VVM, En Azure. Hiernaast zal je ook in

Bekijk vacature »

Junior .NET Developer gezocht in de regio midden-N

Waar een klein land wel niet groot in kan zijn bewijst dit kleine bedrijf maar weer eens dat gevestigd is in midden-Nederland. Hoewel dit een klein bedrijf is, zijn ze gepositioneerd als wereldmarktleider op het gebied van satelliet communicatie. Het bedrijf bestaat al 10 jaar, maar is vanuit één vestiging met drie werknemers ondanks haar marktpositie bijzonder compact. Er heerst een informele sfeer en waar een biertje op de vrijdag middag borrel niet zal ontbreken. Functie-omschrijving Je zal trainingen krijgen om deze speciale tak van sport te leren. Als all-round .NET developer wordt er van je verwacht dat je zelfstandig

Bekijk vacature »

Op zoek naar een PHP developer met Magento kennis

Dit full services internetbureau bestaat vijf jaar. Het bedrijf is in een korte periode heel erg succesvol geworden. Dit komt door de fantastische mensen die daar werken. Ze boeken met elkaar het één na het andere resultaat. Ze krijgen mooie opdrachten van internationale klanten en daar behoort ook webshops maken in Magento. Het is de bedoeling dat je met Magento de schaalbaarheid en flexibiliteit biedt die nodig is om een webshop te laten groeien. De bedoeling is dat je jouw ideeën vertaalt naar mooie oplossingen en dat je in staat bent om de bestaande markt op het gebied van online

Bekijk vacature »

HBO of WO Informatica afgerond en toe aan de prakt

Voor één van Nederlands grootste Hostingproviders zijn wij op zoek naar een enthousiaste collega op (PHP) development gebied. Met een team van ruim 80 man wordt gestreefd naar de beste service op het gebied van hosting. Om dit alles mogelijk te maken zijn er tal van interne systemen ontwikkeld (alles wordt inhouse ontwikkeld/doorontwikkeld) waar men steeds weer kijkt naar nieuwe mogelijkheden om het geheel te verbeteren. Functie-omschrijving Belangrijk is de OO-gedachtegang. Kom je uit de Java, C++ hoek, maar heb je wel oren naar een baan als technische / backend PHP developer, dan zit je hier goed! In een team

Bekijk vacature »

Front-end developer

Jij weet wat er nodig is. Jouw hart gaat sneller kloppen van techniek. Jij wil vooruit. Ben jij de Front-end Developer die we zoeken? Je bent creatief, thuis in gebruikersinteractie en een gedreven engineer in hart en nieren. Daarnaast heb jij een klantgerichte en proactieve houding. Precies de kwaliteiten die een Front-end Developer nodig heeft. Wat doe je als 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 binnen het Center of Excellence van Sogeti. Jij houdt van het uitdenken en

Bekijk vacature »

Bedruk jij op Medior/Senior niveau in PHP?

Dit bedrijf is ongeveer een kleine decennium geleden opgericht en zijn ze vol passie en moed over de startlijn op de markt gegaan. Wat ontstond als een leuk idee is anno 2016 uitgegroeid tot een professionele webwinkel waar niks onmisbaar in is. Enerzijds zijn ze actief voor de particuliere markt, maar anderzijds ook voor bedrijven. Wat ze doen is eigenlijk erg simpel; Ze bestickeren en bedrukken producten ( denk hierbij aan o.a : pennen, aanstekers, paraplu’s , t-shirts en zelfs flesjes water). Deze producten kunnen erg verschillen van elkaar en het bedrijf wilt het liefst ook alles mogelijk maken. Onlangs

Bekijk vacature »

Lead PHP Developer / 64K / Pensioenregeling

Ben je een ervaren PHP Developer met de ambities om leiding te geven aan een team? Dan is deze functie zeker het bekijken waard. Voor een bedrijf in Den Haag ben ik namelijk op zoek naar een Lead PHP Developer. Takenpakket Je bent een ervaren programmeur en in jouw rol als Lead PHP Developer ga je leiding geven aan een team. Je bent verantwoordelijk voor de planning en realisatie van de applicaties die in ontwikkeling zijn. Verder houd je de sprint demo's in de gaten en breng je advies uit aan het management team. We zijn op zoek naar een

Bekijk vacature »

.Net Developer Zuid-Holland vanaf €4000,-

.Net Developer Zuid-Holland vanaf €4000,- Wat ga je doen als .Net Developer? Wil jij de komende jaren hetzelfde werk doen? Dan is dit 'NIET' de job voor jou. Ben je opzoek naar een uitdaging en wil je tegelijkertijd ook onderdeel zijn van een laagdrempelige en informele IT-club die echt hart heeft voor zijn medewerkers? Dan is dit de job voor jou! Dit bedrijf is een allround ICT-dienstverlener die op zoek is naar een .Net developer met kennis van C# en .Net. Het is een uitgelezen kans als je jouw expertise wilt inzetten binnen afwisselende en uitdagende projecten waarbij diversiteit, flexibiliteit

Bekijk vacature »

Salesforce Developer / Administrator

Salesforce Developer / Administrator Wat ga je doen als Salesforce Developer / Administrator? Om de ambities van Ambitious People Group te kunnen waarborgen, zoeken wij een analytisch sterke persoonlijkheid. Jouw kennis zorgt ervoor dat je de linking pin bent tussen techniek en de business. Je krijgt de kans om aan de slag te gaan met een groeiend platform (Salesforce). Daarnaast is er een ruim aanbod aan trainingen in een bedrijf dat bekend staat om haar groeimogelijkheden! In deze functie werk je op het hoofdkantoor van de Ambitious People Group midden in de Amsterdamse Pijp. Je houd je onder andere bezig

Bekijk vacature »

Junior Mean Stack developer voor een internationaa

Dit internationale bedrijf bestaat uit acht vestigingen wat verspreid zit over de hele wereld. Totaal telt deze holding 230 werknemers. De organisatie bestaat momenteel ruim 35 jaar en blijft zich ontwikkelen en breid zich steeds verder uit. Ze hechten veel waarde aan hun medewerknemers en vinden hun toekomst en ontwikkeling belangrijk. Ze bieden de mogelijkheid om interne opleidingen te volgen en coaching te krijgen. De voertaal van het bedrijf is Engels, er wordt dan ook verwacht van je dat je Engels uitstekend is in woord en geschrift. Het bedrijf heeft een informele werksfeer en werken om de twee maanden aan

Bekijk vacature »

Angular Ontwikkelaar voor grote E-commerce partij

Functieomschrijving Ben jij dé JavaScript goeroe die het leuk vindt om met o.a. Angular2 en NodeJS bestaande applicaties te verbeteren en nieuwe applicaties te ontwikkelen? Wacht dan niet langer en reageer! Al meer dan 25 jaar helpt deze organisatie zijn klanten bij efficiënter maken van o.a. marketing en logistieke processen. Dit doen zij door middel van hun eigen ontworpen Software as a Service oplossing. Vanwege hun jarenlange ervaring hebben zij veel kennis over de processen die belangrijk zijn bij hun klanten. Mede hierdoor zijn zij erg succesvol in hun branche. Doordat deze branche nooit stil staat en er steeds meer

Bekijk vacature »

Amsterdam - Java Developer - Cloud/Microservices -

Nederlandse Java Developers opgelet, ik ben op zoek naar een Java ontwikkelaar die graag de handjes uit de mouwen steekt en in een bedrijf met een startup-gevoel en een multinationale achtergrond werkt. Voor mijn klant in Amsterdam ben ik op zoek naar Java ontwikkelaar die net zo hard wilt groeien als de exponentiële groei fase waarin het bedrijf zich momenteel vind. De unieke cloud-based software is gebouwd met de nieuwste technologie-stack, de droom van elke Java ontwikkelaar. Als je gespecialiseerd bent in Java ontwikkeling, kennis hebt van Spring, SQL, AWS, Docker en Microservices of als dit de richting is waarin

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

17/08/2018 01:52:27
 
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.