php only allow letters, numbers, spaces and specific symbols using pregmatch php only allow letters, numbers, spaces and specific symbols using pregmatch php php

php only allow letters, numbers, spaces and specific symbols using pregmatch


Use

preg_match('/^[a-z0-9 .\-]+$/i', $firstname)


If you not only want to allow ASCII, then use Unicode properties:

preg_match('/^[\p{L}\p{N} .-]+$/', $firstname)

\p{L} is any letter in any language, matches also Chinese, Hebrew, Arabic, ... characters.

\p{N} any kind of numeric character (means also e.g. roman numerals)

if you want to limit to digits, then use \p{Nd}


The only difficult bit here is the dash.

For spaces and dots, you can simply add them to your character class, like so:

'/^[a-zA-Z0-9 .]+$/'

Easy.

The dash is slightly harder because hyphens have special meaning in a character class like this (as you already know, they're used for ranges of characters like a-z). In order to specify a hyphen in a character class, it must be the first character in the class (ie it must not be between two characters, otherwise it is treated as a character range marker).

So your expression would be:

'/^[-a-zA-Z0-9 .]+$/'

Hope that helps.