Regex limiteren van aantal lettergebruik

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dave van Doorn

Dave van Doorn

04/05/2020 16:23:25
Quote Anchor link
Hallo allemaal,

Ik gebruik een website met Wordpress. Ik probeer in een invulveld het nodige aan limieten te creëren in een regex string. Moet zeggen of niet zeker ben of ik de juiste vaktermen gebruik. Ik ben geen diehard programmeur, maar ben altijd bereid om op onderzoek en proberen uit te gaan.

In een string voor een invulveld heb ik het volgende (zie de code hieronder), wat goed werkt tot nu toe en praktisch ook de standaard string is van de plugin. De standaard heb ik aangevuld met een aantal "lelijke woorden". Die lelijke woorden ga ik nog uitbreiden.

Quote:
case 'only_letters_numbers':
$attr .= 'pattern="^(?!(.*kut.*|.*KUT.*|.*lul.*|.*LUL.*)$)[A-Za-z0-9\s.-]+"';
$attr .= ' title="' . __( 'Only letters and numbers', 'woocommerce-product-addons' ) . '"';
break;


Deze strings zorgen ervoor dat ik alle letters en alle cijfers kan laten gebruiken. Nu heb ik ook twee lelijke woorden op de 'blacklist' gezet dus.

Maar, ik wil deze bestaande string uitbreiden met het limiteren van letters. Bijvoorbeeld:
De letter W wil ik maximaal 4 keer laten invullen. De Letter E wil ik max 8 keer laten invullen. etc
Voor mij is het van cruciaal belang dat dit het mogelijk maakt. Ik bedruk potloden en van elke letterteken heb ik verschillende aantallen.

Nu weet ik dat je o.a. letters kan beperken in de volgende regex: [W]{4}|[E]{8}| etc.
Alleen krijg ik het niet werkend. Heb de afgelopen dagen veel gezocht en geprobeerd. Maar waarschijnlijk door mijn onwetendheid krijg ik het niet toegepast in mijn bestaande string en werkend. Ook heb ik geprobeerd om bv de kleine letter toe te voegen zoals: [Ww]{4}|[Ee]{8}| Maar omdat de basis functie al niet werkt, zal deze al helemaal niet werken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
https://whatsupjeboterham.nl/product/set-potloden-wit-5-stuks-met-eigen-naam-of-tekst



Is er iemand die begrijpt wat ik bedoel en mij op weg kan helpen?

Vriendelijke groet,
Dave
Gewijzigd op 04/05/2020 17:16:52 door Dave van Doorn
 
PHP hulp

PHP hulp

02/02/2023 03:20:17
 
- Ariën  -
Beheerder

- Ariën -

04/05/2020 16:43:37
Quote Anchor link
Misschien is dit niet helemaal het antwoord wat je zoekt, maar wat is het nut door het blokkeren van dergelijke woorden? Iemand kan dit zo omzeilen, waarbij je steeds je reg-ex moet blijven uitbouwen totdat die een kilometer lang is.

Om terug te komen op je actie:
Je zit nu op de verkeede plek de filter in te bouwen. De filter heet 'only_letters_numbers' en geen 'only_letters_numbers_and_no_swearing'.

Voor je doeleinde kan je beter een nieuwe case aanmaken. Want als ik bijvoorbeeld woordsudokutje wil intypen, dan krijg ik mogelijk te zien dat deze niet voldoet omdat er enkel letters en cijfers geaccepteerd worden, en daar voldoet die aan.

Een mooie regex als filter zou dit kunnen zijn:
\b(|kut|shit)\b

De \b boundary zorgt ervoor dat er naar het hele woord gekeken wordt, dus woordsudokutje valt er weer niet onder. Maar het betekent wel dat je een lange lijst moet maken. En dan is eigenlijk de cirkel rond waar ik mee begon.... ;-)
Gewijzigd op 04/05/2020 16:47:37 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

04/05/2020 16:58:59
Quote Anchor link
Het nadeel van een blacklist is dat deze alle cases moet bevatten, anders is deze zinloos.

Als je niet wilt dat mensen verkeerde dingen in kunnen vullen, geef hun hier dan simpelweg niet de mogelijkheid toe. Beperk de mogelijkheden voor invoer, dus alles waar je text vrij in kunt vullen is waarschijnlijk op voorhand niet echt geschikt. Bedien je van dropdowns, checkboxen et cetera, waarbij het dus al is voorgeschreven wat de invoer mag zijn.

Waarschijnlijk is die aanpak in dit geval niet toereikend, maar je zou dus kunnen denken aan een whitelist: wat is wèl toegestaan? En als dat duidelijk is zou je na kunnen denken over de presentatie hiervan. Je zou zelfs een custom formulierveld kunnen bouwen waarbij je dus de volledige controle hebt over wat er ingevoerd kan worden. En uiteraard controleer je deze invoer nogmaals tijdens verwerking.
 
Dave van Doorn

Dave van Doorn

04/05/2020 17:09:07
Quote Anchor link
Hoi Arién,

Dank je wel voor de snelle reactie.

Geeft niks dat je niet direct inhoudelijk reageert of helpt. Het helpt mij alleen maar om verder te denken en handelen. Je hebt gelijk w.b.t. het blokkeren van woorden. De plugin draait nu een week op de website. En de afgelopen dagen willen mensen bv 'kutkind' op potloden besteld hebben. Of 'hoerenjong'. Wij zijn een bedrijfje wat zich richt en drijft op kinderen/kinderuitspraken etc. Dus een aantal woorden willen we gewoon niet mogelijk maken en dus ook niet maken/aanbieden/aanmoedigen. Daarvoor mogen ze naar Rumag gaan ;-) Het is een klein dilemma, klopt. Om dergelijke woorden te verbieden. Want zo heb je ook bv 'hoer'. Maar die kan ik niet verbieden omdat er ook potloden besteld worden met bv 'Hoera' er op. Ik beperk mij dan maar tot een aantal explicite woorden. 99 van de 100 bestellingen worden gelukkig normale teksten gebruikt.

Ik heb tot nu toe geen idee waar ik deze extra toepassingen anders zou moeten maken dan de originele strings.
De plugin geeft 3 instellingen mogelijk. En alle 3 hebben ook echt de basis functies. Wat niet per se slecht is. Maar die ik gebruik wil/moet ik dan wel aanpassen. Dit zijn de 3 standaard mogelijkheden die ik in de Admin van WP kan instellen:

Quote:
switch ( $restrictions_type ) {
case 'only_letters':
$attr .= ' pattern="[A-Za-z]+"';
$attr .= ' title="' . __( 'Only letters', 'woocommerce-product-addons' ) . '"';
break;
case 'only_numbers':
$attr .= ' pattern="[0-9]+"';
$attr .= ' title="' . __( 'Only numbers', 'woocommerce-product-addons' ) . '"';
break;
case 'only_letters_numbers':
$attr .= 'pattern="[A-Za-z0-9]+"';
$attr .= ' title="' . __( 'Only letters and numbers', 'woocommerce-product-addons' ) . '"';
break;
}


Jouw voorstel m.b.t. de boundary wil ik zeker proberen. Maar voor nu wil ik mij eerst richten op de beperkingen van het aantal lettertekens zie ze mogen gebruiken. Dat is een beetje het grootste probleem die ik moet proberen in te dammen.

Toevoeging op 04/05/2020 17:15:18:

Thomas van den Heuvel op 04/05/2020 16:58:59:
Het nadeel van een blacklist is dat deze alle cases moet bevatten, anders is deze zinloos.

Als je niet wilt dat mensen verkeerde dingen in kunnen vullen, geef hun hier dan simpelweg niet de mogelijkheid toe. Beperk de mogelijkheden voor invoer, dus alles waar je text vrij in kunt vullen is waarschijnlijk op voorhand niet echt geschikt. Bedien je van dropdowns, checkboxen et cetera, waarbij het dus al is voorgeschreven wat de invoer mag zijn.

Waarschijnlijk is die aanpak in dit geval niet toereikend, maar je zou dus kunnen denken aan een whitelist: wat is wèl toegestaan? En als dat duidelijk is zou je na kunnen denken over de presentatie hiervan. Je zou zelfs een custom formulierveld kunnen bouwen waarbij je dus de volledige controle hebt over wat er ingevoerd kan worden. En uiteraard controleer je deze invoer nogmaals tijdens verwerking.


Hoi thomas,

Dank voor je bericht! Jullie hebben gelijk wat betreft de blacklisting en whitelisting. Het is ook een beetje uitzichtloos om alle vervelende woorden uit te sluiten. Daar beginnen we ook niet aan hoor. Als we patronen zien in gerichte vervelende woorden, dan spreken wij de klant er op aan en passen we het in overleg aan. Dropdowns, check en of of selectieboxen heb ik in de testfase geprobeerd. Maar dat was in de praktijk een beetje onduidelijk icm waar het formulier over gaat.

Maar wat ik ook tegen Ariën al zei, ik wil mij eerst richten om de limieten van de letters voor elkaar te krijgen. Dat is eigenlijk het echte probleem en bezorgd mij een beetje grijze haren de laatste dagen :-)

Toevoeging op 04/05/2020 17:18:16:

Ik heb in mijn eerste post de url toegevoegd waar de plugin/script draait. Voor wat het waard is en als er gekeken wordt waar het om gaat.
 
Ivo P

Ivo P

04/05/2020 18:14:39
Quote Anchor link
En dan pontificaal bovenaan een potlood met "poephoofd" op je frontpage zetten....
 
Dave van Doorn

Dave van Doorn

04/05/2020 18:23:10
Quote Anchor link
Ivo P op 04/05/2020 18:14:39:
En dan pontificaal bovenaan een potlood met "poephoofd" op je frontpage zetten....


Poephoofd, valt net in de veilige groep ;-) Zo zijn er wel meer woorden en uitspraken gebaseerd op 'kinderuitspraken' en of met een ludieke betekenis. De woorden die we wel tegenhouden worden dan ook regelmatig icm als beledigend en kwetsend bedoeld. Zo zouden we hier nog lang over kunnen praten. Maar daar gaat dit topic verder niet om.
 



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.