Regex, dubbele tekens vermijden?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Medior PHP developer (3+ jaar) en gezien worden? H

In de regio Amsterdam werkt men aan een aantal grote en bekende labels. Deze labels hebben elk hun eigen online presentatie en gaan gekoppeld aan een intern ontwikkeld platform. Dit platform is goed gestructureerd opgebouwd en bestaat uit diverse modules. We spreken van een grote firma met een compact, maar sterk kundig team. Ondanks de grote van de firma is de sfeer zeer laagdrempelig en informeel en gaat dit alles gepaard met professionaliteit. Functie-omschrijving Als Medior backend developer zal je middels de ondersteuning vanuit 1 Senior en 1 Medior backend collega aan de slag gaan met de ontwikkeling van up-to-date

Bekijk vacature »

Medior Full-stack Developer (OOP/MVC) met gevoel v

Het bedrijf zelf is al sinds jaar en dag actief in de Zorgsector en heeft recentelijk haar koers gewijzigd van maatwerk naar SAAS. Door samen met haar doelgroep te gaan zitten hebben zij een 3-tal modulair opgebouwde applicaties ontwikkeld. Applicaties waarvan één inmiddels als marktleider bestempeld mag worden en de andere twee hard op weg zijn naar de top. Los van een ontzettend sterke motivatie om mooie en proces verbeterende producten op te leveren is dit bedrijf (zoals je wellicht zal verwachten bij een bedrijf in de zorg) zeer dienstverlenend ingesteld. Zoals de producten bij aanvang zijn ontstaan, zo worden

Bekijk vacature »

Lead Developer / Javascript / Node.js / 36 uur / r

Ben jij een ervaren Developer en vind jij jezelf een goede Lead om junioren technisch te begeleiden? Heb jij goede kennis van Javascript en wellicht Node.js? Functieomschrijving Ben jij een ervaren Developer en vind jij jezelf een goede Lead om junioren technisch te begeleiden? Heb jij goede kennis van Javascript en wellicht Node.js? Dan is deze vacature in regio Den Bosch iets voor jou! Het gaat om een informeel, jong en fris bedrijf in regio Den Bosch waar kernwoorden als inspiratie, ambitie, innovatie, dynamiek en betrokkenheid van toepassing zijn. De organisatie staat goed in de markt en telt in totaal

Bekijk vacature »

Junior Java Developer Angular Automotive Branche

Junior Java Developer Angular Automotive Branche Functieomschrijving Wil je werken bij een van de meest vooruitstrevende en innovatieve organisaties in Nederland? Dan is deze rol als Java Developer wellicht iets voor jou. Je gaat werken aan software dat wordt gebruikt door bijna 100.000 mensen in het binnen- en buitenland! Angular PostgreSQL Docker OpenShift DevOps Ontwerpen, bouwen, testen en opleveren van werkende software oplossingen met een Agile aanpak; Assisteren in het ontwerpen en verbeteren van de technische software architectuur en het continuous delivery framework; Aanscherpen en implementeren van requirements, richtlijnen en beperkingen voor de non functionele aspecten van de IT-oplossingen zoals:

Bekijk vacature »

Medior/Senior C# VB.NET Developer

Organisatie Ken je dat gevoel dat je als IT’er niet wordt gewaardeerd binnen een bedrijf? Of dat je eigenlijk maar een aanvulling bent op de rest? Dan heb ik hier een vacature bij de absolute tegenpool hiervan! Dit softwarebedrijf is volledig gericht op ICT. Meer dan de helft van al het personeel zijn developers. Zelfs de directeur is programmeur. Hierdoor ben je ervan verzekerd dat je in goede handen terecht zult komen. De gehele bedrijfsvoering is erop gebouwd om alleen de moeilijkste uitdagingen aan te nemen. Projecten en opdrachten die bij andere bedrijven gefaald zijn, nemen zij met alle plezier

Bekijk vacature »

.NET Software Ontwikkelaar gezocht nabij Doetinche

Organisatie & Afdeling Een grote partij die bijna 20 jaar bestaat, nabij Doetinchem, is op zoek naar een junior/medior C# Developer! Deze partner zit in de digitale dienstverlening en levert daarvoor de software. Digitaal breed zijn ze actief voor verschillende klanten. Hun klanten zijn actief in de overheidssector. Het doel is om IT oplossingen zo eenvoudig mogelijk te maken voor de klant. In de afgelopen 20 jaar zijn ze gegroeid naar bijna 80 medewerkers en hun groeiambities laten zien dat hier voorlopig nog geen einde aan komt. Dit zal je ook terugzien in de samenstelling van het developers-team. Op dit

Bekijk vacature »

Microsoft back-end developer - Rotterdam Area

Functieomschrijving Are you a passionate developer and do you have experience with Powershell? Are you a fan of C#/.NET? Do you want to be part of the infra department within one of the biggest financial organisations in the Netherlands? Then this could be your next job! You will be engaged in managing and optimizing proceedings like the development of API's. Under the guidance of a senior you will learn the tricks of the role. Every day will be different, but your work will consist of the following: The automation of activities (development APIs); The development and execution of tests; Management

Bekijk vacature »

Passie voor programmeren? Gezocht: Junior .NET dev

Hier word vanaf eind jaren 80 gewerkt aan ICT oplossingen om productinformatie op orde te houden en processen te automatiseren. Die jaren ervaring hebben gezorgd voor een stabiele basis. Op gebied van het managen van productinformatie zijn zij marktleider. Door de jaren heen is er een grote verscheidenheid aan klanten waaronder een aantal zeer grote namen. In totaal werken er 34 mensen die allemaal goed zijn in hun vak van sales tot marketing en van developers tot testers. De sfeer is informeel. De structuur is plat en je kan gewoon in je spijkerbroek naar je werk gaan. Functie-omschrijving Wanneer je

Bekijk vacature »

Linux Juniortraject

Linux Juniortraject De basis leggen voor jouw IT-carrière Ben jij net of bijna afgestudeerd maar nog niet klaar met leren? Zie jij jezelf werken als engineer met opdrachten op het gebied van Linux-infrastructuren, Cloud, Programmeren en Configuration Management? Dit uitdagende IT-traineeship van Snow geeft binnen 7 maanden een vliegende start aan jouw IT-carrière! De combinatie van theorie en praktijk zorgt voor ijzersterke technische skills én professionele vaardigheden. Nergens anders ontwikkel jij jezelf zo snel. Op maat gemaakt Je stelt samen met je coach een persoonlijk ontwikkelplan op. Met de keuze uit meerdere trainingen en workshops kies je jouw weg. Anderen

Bekijk vacature »

C# developer gezocht (Webdevelopment, Xamarin, Ang

Voor een bedrijf in Capelle aan den IJssel zijn we momenteel op zoek naar een .NET C# developer. Het gaat om een organisatie van circa 15 mensen waarvan 7 .NET ontwikkelaars. Het bedrijf richt zich op drie door hun ontwikkelde (web & app) producten in verschillende niche markten. Van deze systemen is met name één systeem erg succesvol en volop in ontwikkeling. Met een dominante positie in de Benelux als basis, zijn ze momenteel bezig het systeem verder uit te rollen in de rest van Europa en daarbuiten. Tevens werken ze aan nieuwe toepassingen van dit systeem om andere afzetmarkten

Bekijk vacature »

Digitale Mobiele Ontwikkelaar Bureau 2.300 - 4.300

Functieomschrijving Digitale Mobiele Ontwikkelaar Bureau 2.300 - 4.300 Voor de vacature als Digitale Mobiele Ontwikkelaar Delft Bureau ga je het volgende doen: Wat kan je verwachten in jouw rol als Mobile Developer? De totstandkoming van onze oplossingen is een mooi staaltje vakmanschap en interactie tussen onze klanten en designers, UX-ers, developers en engineers. Binnen onze projecten ben je (mede) verantwoordelijk voor het technisch ontwerp- en bouw van onze mobile apps. Je maakt onderdeel uit van een of meerdere teams waarin je op basis van onze eigen “best practice” principes van Agile en Dev-Ops nauw samenwerkt met collega’s en klanten. Bij

Bekijk vacature »

Innovatieve C#ASP.NET developer gezocht voor innov

Dit bedrijf is trots op het feit dat zij een jong en zeer innovatief bedrijf zijn. Ze zijn gespecialiseerd in het realiseren en uitbreiden van verschillende SAAS oplossingen voor de financiële branche. Het op grote schaal ontwikkelen van deze oplossingen heeft hun focus. Een recentelijk voorbeeld is een grootschalig Always-online boekhoud platform voor grootschalige bedrijven. De oplossingen die zij ontwikkelen zijn zeker niet beperkt tot grootschalige platformen. Een recentelijk voorbeeld is een slimme tool om belastingaangiften makkelijker te maken voor MKB en ZZP. Hetgeen waarmee deze organisatie zichzelf voornamelijk apart zet is door de slimme manier waarmee zij complexe materie

Bekijk vacature »

Backend PHP Developer

Organisatie Werk jij graag aan de doorontwikkeling van interne en externe applicaties waar bij je met veel nieuwe tools en technieken mag werken? Vind jij ook dat gemak en eenvoud voor de klant het belangrijkst is? Deze dynamische organisatie van bijna honderd man groot, gevestigd in een goed bereikbaar, mooi pand in Amstelveen bevind zich in de telecom branche. Dit bedrijf levert zowel internet als telefonie in de cloud aan bedrijven waarbij het gemak van de klant het belangrijkst is. Dit is een jong bedrijf waarbij de gemiddelde leeftijd van werknemers om en nabij de 30 ligt. Beslissingen worden hier

Bekijk vacature »

Medior en Senior Software Developer – Micros

Bedrijfsinformatie Ben jij op zoek naar een stabiele organisatie waar jij deel uit kan maken van een hoog gekwalificeerd scrumteam? Werken voor deze prachtige organisatie betekend dat je met de nieuwste technieken gaat werken en moeilijke vraagstukken gaat oplossen. Eén ding is zeker, op technisch vlak zal jij iedere dag worden uitgedaagd. Functie Als .Net developer ga jij je samen met jouw collega’s bezig houden met het technisch ontwerp, ontwikkeling en verbetering van alle webapplicaties. Jij zal werken met ASP.NET, C#, XML, HTML, XHTML, Javascript & CSS, WCF and REST, Webservices, MS Visual Studio 2013 and Jira en SQL Server.

Bekijk vacature »

.NET Developer / softwarehuis / inhouse / Cloud /

Functieomschrijving Wil jij werken voor verschillende grote en bekende partijen in Nederland? Elke dag werken aan inhouse projecten voor deze partijen bij een van de bekendste bureaus op het gebied online platformen? Solliciteer dan nu! Ontwikkelen van diverse online platformen; Volgens Scrum methodiek samen met je team verantwoordelijk voor de op te leveren producten; Kennis delen met collega’s op diverse manieren; Bewaken van architectuur van de applicaties. Functie-eisen Je beschikt over HBO werk- en denkniveau; Minimaal 5 jaar ervaring met .NET of ervaring met Sitecore; Ervaring met MVC, Cloud, Web Services en TDD is een pré; Je bent communicatief vaardig

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

11/12/2018 18:11:24
 
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.