web-dev-qa-db-fra.com

php n'autorise que les lettres, les chiffres, les espaces et les symboles spécifiques en utilisant preg_match

sur mon php j'utilise preg_match pour valider les textes saisis.

if(preg_match('/^[a-zA-Z0-9]+$/', $firstname)) {
}

Mais cela n'autorise que les caractères alphanumériques et ne permet pas les espaces. Je veux autoriser les espaces, alpha et numérique. et point (.) et tiret (-)

S'il vous plaît, aidez-moi ici? Merci d'avance.

28
CudoX

Utilisation

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

Si vous souhaitez non seulement autoriser ASCII, utilisez alors propriétés Unicode :

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

\p{L} est n'importe quelle lettre en n'importe quelle langue , correspond également aux caractères chinois, hébreu, arabe, ...

\p{N} tout type de caractère numérique (signifie également par exemple des chiffres romains)

si vous voulez vous limiter aux chiffres, utilisez \p{Nd}

20
stema

Le seul point difficile ici est le tiret.

Pour les espaces et les points, vous pouvez simplement les ajouter à votre classe de personnage, comme ceci:

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

Facile.

Le tiret est légèrement plus difficile car les tirets ont une signification particulière dans une classe de caractères comme celle-ci (comme vous le savez déjà, ils sont utilisés pour des plages de caractères comme a-z). Afin de spécifier un trait d'union dans une classe de caractères, il doit être le premier caractère de la classe (c'est-à-dire qu'il ne doit pas être entre deux caractères, sinon il est traité comme un marqueur de plage de caractères).

Votre expression serait donc:

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

J'espère que ça t'as aidé.

4
Spudley