Regex, dubbele tekens vermijden?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Software Programmeur PHP - JAVA

Functie Wil jij bij een platte en informele organisatie werken? Lees dan snel verder! Voor een opdrachtgever in omgeving Boskoop dat zich gespecialiseerd heeft in het realiseren van veilige netwerkverbindingen zijn wij op zoek naar een leuke software developer ter versterking van het huidige team. Hoe kan jouw dag er straks uitzien? Je gaat technische klussen uitvoeren op locatie bij klanten.Je onderhoudt contact met de projectleider om er zeker van te zijn dat een projecten goed verlopen. Je gaat klanten ondersteunen op het gebied van geleverde software en webapplicaties. Je gaat software en webapplicaties ontwikkelen met behulp van de talen

Bekijk vacature »

OutSystems Developer

Dit ga je doen Het van scratch af aan ontwikkelen van applicaties met OutSystems; Het aanhaken bij diverse projecten binnen de organisatie; Schakelen met de business; Meedenken over de mogelijkheden van het platform binnen de organisatie. Hier ga je werken Deze organisatie is een toonaangevende speler in de vastgoedbranche en telt momenteel ruim 500 medewerkers. Met meer dan 150 applicaties staat er een complex applicatielandschap, bestaande uit standaard- en maatwerkapplicaties. De maatwerkapplicaties worden ontwikkeld door een inhouse development team. Het doel voor de komende periode is het verder vernieuwen en optimaliseren van het huidige applicatielandschap. Zo staat de organisatie aan

Bekijk vacature »

Ervaren PHP developer gezocht!

Functie Het team bestaat inmiddels uit zo’n 25 collega’s met specialisten op het gebied van development, data(analyse), marketing, infrastructuur en finance. Ze hebben een supermodern pand en bieden hiernaast veel vrijheid en verantwoordelijkheid. Ze doen er alles aan om jou op te gemak te stellen. Zo kun je je eigen werkplek inrichten naar persoonlijke wensen, maar gaan ze bijvoorbeeld ook jaarlijks met elkaar wintersporten en zijn er andere leuke uitjes. Als onderdeel van één van de scrumteams ga je aan de slag, samen ben je medeverantwoordelijk voor het doorontwikkelen van hun business applicatie waar het traffic team dagelijks mee werkt.

Bekijk vacature »

Back end developer PHP

Functie Met een complex en uitgebreid e-commerce platform, een eigen PIM-systeem en eigen scan applicatie – krijg jij dagelijks te zien hoe jouw werk gebruikt wordt door miljoenen gebruikers. En we staan qua development pas in de startblokken, aangezien er nog meerdere projecten op de plank liggen te wachten! Ons huidige development team bestaat uit 8 programmeurs. Er wordt dagelijks gereflecteerd op geschreven code, Scrum taken en kennisdelen onderling is een must. Onze voertaal binnen ons team is Engels, dit omdat wij twee internationale collega’s hebben. Ons huidige “IT Landschap” bestaat voornamelijk uit allerlei losse onderdelen die individueel, maar ook

Bekijk vacature »

Ontwikkelaar Centrale Monitoring

Ontwikkelaar centrale Monitoring Functieomschrijving Wil jij een bijdrage leveren aan het onderhoud, opzetten en ontwikkelingen van technologieën van SSC-ICT, een van de grootste ICT-dienstverleners van en voor de Rijksoverheid? Je komt als monitorspecialist te werken bij team Operations Management Services. Dit team werkt aan het stabiliseren en waarborgen van een betrouwbare monitoromgeving voor 7 ministeries. Jij begeleidt het implementatieproces van de te monitoren technologieën, onder andere via management packs, connectoren en API's. Je hebt hiervoor veel contact met interne en externe klanten, die hun wensen op het gebied van monitoring aan jou doorgeven. Je beoordeelt deze wensen en komt met

Bekijk vacature »

Grafisch vormgever

Standplaats: Maasland Aantal uren: 32 – 40 uur per week Opleidingsniveau: HBO werk- en denkniveau Ben jij een ambitieuze grafisch vormgever met een passie voor creativiteit en oog voor detail? Vind jij het daarnaast leuk om ook marketingactiviteiten op te pakken? Dan zijn wij op zoek naar jou! Bedrijfsinformatie Westacc Group BV is het zusterbedrijf van HABA en specialiseert zich in (maatwerk) oplossingen voor (elektro) techniek en verlichting in de kampeerbranche. Zij produceren en assembleren onderdelen voor caravans, campers en boten. Voor een groot aantal caravan- en campermerken leveren wij producten als zekeringkasten, invoerdozen, acculaders, schakelmateriaal en verlichting. De producten

Bekijk vacature »

Medior/senior front end developer

Functie Vanwege de groei binnen het bedrijf zijn ze op zoek naar een Technische front end developer. Momenteel hun front end back end team gescheiden aan het werk. Hier willen ze verandering in krijgen. Omdat ook veel interne applicaties ontwikkeld worden zoeken ze iemand die hen kan helpen om de interne applicaties te voorzien van de juiste Vue.js componenten. Zodoende willen ze de interactie tussen front end en back end versoepelen en de volgende stap binnen het platform gaan zetten. Deze componenten die jij ontwikkeld zullen in elk project gebruikt worden. Het back end team bestaat momenteel uit 8 ontwikkelaars

Bekijk vacature »

Fullstack Software Developer

Bedrijfsomschrijving Functieomschrijving Java ontwerpen, bouwen en testen (T-shaped). Als senior ontwikkelaar ben je bekend in zowel de back-end als de frontend van een applicatie. Angular, Continious Delivery / Integration. Een ervaren iemand die de leiding kan nemen, een weg vindt in nieuwe situaties, en in oude applicaties. Initiatiefrijk, bekend met de (technische) omgevingen die we bij duo gebruiken, niet te beroerd om collega’s te helpen. Als senior programmeur in staat om op te treden als lead programmeur. Ondersteunt de testers bij de testautomatisering en minder ervaren programmeurs bij dagelijks werkzaamheden. Dit laatste met name op het gebied van Angular. Achtergrond

Bekijk vacature »

Machine Software Developer

Bij een bedrijf in de machinebouw, regio Roosendaal, zijn we op zoek naar een: Machine Software Developer Waar ga je werken? Onze opdrachtgever is gespecialiseerd in de grondverzetmachines. Al meer dan 50 jaar leveren ze zowel nationaal als internationaal diverse machines. Het is een familiebedrijf met een informele werksfeer. Wat ga je doen? Als Machine Software Developer ben je verantwoordelijk voor: - Je ontwerpt, ontwikkelt en debugt software voor machinebesturingssystemen en complexe landbouwmachines; - Je stelt gebruikersinterfaces op (cabinedisplays); - Op termijn ga je softwareprojecten leiden voor specifieke machines; - Inclusief planning, documentatie en validatie; - Om specificaties te verifiëren

Bekijk vacature »

Full stack Javascript ontwikkelaar

Functie Benieuwd hoe jouw dag eruit ziet? Je komt binnen rond een uur of 10 en dat start je met de morning call. Dit doen we vanaf het hoofdkantoor of op het lab, ligt eraan welk project je mee bezig bent. Na de call en het verdelen van de tickets ga je met je team aan de slag. Rond een uur of 12 is er een goede lunch en ga je smiddags weer lekker door met je werk. De ene keer maak jij een game voor een groot merk om de interactie tussen product en eindgebruiker te vergroten. De andere

Bekijk vacature »

.NET developer WO niveau voor predictive software

Bedrijfsomschrijving Dit bedrijf uit Den Bosch is om precies te zijn 15 medewerkers groot en ze ontwikkelen (predicitve) planning software. Dit doen zij voor allerlei mooie en bekende organisaties (bierbrouwerijen, gemeentes, oliemaatschappijen en diverse multinationals). Wegens meer en grotere vraag vanuit de klanten komen er nu posities vrij voor onder andere een .NET developer. Het bedrijf is goed met openbaar vervoer te bereiken. Functieomschrijving Je komt hier te werken in een team van 3 .NET developers en bent betrokken bij het gehele ontwikkelproces. Dus van idee naar ontwerp en van ontwikkeling tot testen en implementatie. Bij voorkeur ben je niet

Bekijk vacature »

Software developer

Functieomschrijving Voor een gewaardeerde werkgever in de regio van Middelburg zijn wij op zoek naar een ambitieuze PHP/Symfony Developer. Een enthousiast persoon die het development team komt versterken met het aanpakken van complexe en nieuwe projecten. Ben jij op zoek naar een baan met veel uitdaging binnen een snelgroeiend e-commerce bedrijf, waar je de tijd en ruimte krijgt voor zowel persoonlijke als professionele groei? Lees dan snel verder! Dit ga je doen: Aanpassingssuggesties van collega’s in kaart brengen, vervolgens te analyseren en daarna te concluderen of de aanpassing een verbetering is; Ontwikkeling en beheer van de serviceportal in Symfony en

Bekijk vacature »

Front-end (Angular) developer - remote werken

Functie Als Front-end (Angular) developer ga je aan de slag met het uitbouwen van hun webapplicatie, als één van de front-end experts ga je samen met collega’s in een devops team werken aan een nieuw front-end voor hun calculatie oplossing. Binnen de calculatiesoftware kunnen meerdere professionals tegelijk samenwerken, 3D calculaties uitvoeren en ook inzien met de benodigde specifieke details. Deze software wordt veel ingezet om projectbeschrijvingen en kosten in kaart te brengen, en tijdens de uitvoering te bewaken. Maar hiernaast liggen er in de toekomst veel meer plannen op het gebied van front-end in de andere applicaties. Genoeg te doen

Bekijk vacature »

Anaplan Developer

Dit ga je doen What are you going to do: Picking up Stories: Design planning had, how are we going to build it in Anaplan; Talking to the end user to build a forecasting model; Having contact with the data team about which data is needed; Being able to convert an Excel sheet into a 3, 4 or 5 dimensional modeling environment; Giving knowledge sessions about Anaplan; Solving incidents; Making instructional videos on how teams should read forecasts; Writing blogs about forecasting. Hier ga je werken We are looking for an Anaplan Builder to deliver end-to-end solutions within a big

Bekijk vacature »

Full-stack developer

Als Full-stack developer bij KUBUS houd je je bezig met het ontwikkelen van de (web)applicatie en services van BIMcollab. Samen met je SCRUM team werk je aan zowel de front- als de back-end. Als softwarebedrijf bevindt KUBUS zich in een unieke positie. We bouwen aan onze eigen producten die wereldwijd door tienduizenden gebruikers worden gebruikt. Ons bedrijf heeft precies de juiste grootte: groot genoeg om echt impact te maken in de markt, maar klein genoeg om als individuele ontwikkelaar invloed uit te kunnen oefenen en echt het verschil te kunnen maken. Ons ontwikkelteam bestaat uit ruim 40 ontwikkelaars, testers, scrum

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

08/05/2024 02:43:49
 
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.