Door
G P
op 11-03-2021 12:01
gewijzigd op 11-03-2021 12:02
4.157 views
Hallo allemaal
Om spam tegen te gaan heb ik onderstaande code in een formulier toegevoegd.
Een maat van mij, waar ik een website voor schreef, krijgt klachten van klanten die geen berichtjes kunnen sturen als er bepaalde woorden in gebruikt worden. Het gaat namelijk bv om het woord cliënt.
Ondanks ik niet verboden heb een ë te gebruiken in de code onderaan, wordt dit niet weerhouden. Het zou thans wel moeten kunnen dat sommige leestekens boven de letters (zoals ¨´) wel gebruikt moeten worden.
In plaats van alles te verbieden, behalve wat _jij_ goedkeurt, kun je misschien beter kijken, naar wat je juist niet in je tekst wilt hebben.
En voor e-mail zal dat hoofdzakelijk beperkt zijn tot HTML.
Dus als je < en > zou verbieden, zou dat je probleem al tackelen.
Zij het, dat je dan ook de tekst "alleen voor kinderen < 12 jaar" niet kunnen invoeren.
Daarom zou je ook voor strip-tags() kunnen gaan: je verwijdert dan gewoon alle html uit je invoer.
Veel van die vreemde tekens wordt gebruikt in spam, vandaar. Maar eigenlijk is het de bedoeling dat die vreemde tekens dus niet gebruikt mogen worden, maar letters met een accent of trema wel.
Dus wel:
ä ë ï ö ü
à è ù
á é
ñ
niet:
al die vreemde tekens die in spam gebruikt worden.
Heb even gekeken. Uit die regex geraak ik niet wijs uit, volgens mij is daar ook geen oplossing voor gevonden.
[size=xsmall]Toevoeging op 11/03/2021 14:08:12:[/size]
[/quote]
/^[\p{L}-]*$/u
zou unicode letters (word characters) matchen.
Daaronder vallen ook cijfers.
Maar welke "rare" letters vallen onder de term letter, is afhankelijk van de setLocale() settings. (staat een voorbeeldje van een Italiaan).
Als je bepaalde tekens ook zou willen toestaan, dan kun je die toevoegen. Bijvoorbeeld ook *, punt en komma:
/^[\p{L}*\.,-]*$/u
?Onbekende gebruiker
11-03-2021 15:26
Waarom gebruik je niet Intl?
Voordelen kunnen zijn de spoofchecker en grapheme-functies voor filteren op metadata van karakters...