Détecter des caractères dans n'importe quel ordre

Je sortingse un système d'logging de nom d'user, et une partie de notre protocole est que les users ne peuvent utiliser que AZ, az, 0-9, _,., Et -. En outre, ils ne peuvent pas avoir deux signes de ponctuation d'affilée.

J'essaie de find un moyen plus simple de détecter la ponctuation autrement que de simplement écrire les cordes physiques:

if (strpos($ssortingng, "..") !== false || strpos($ssortingng, "._") !== false || strpos($ssortingng, "-.") || strpos($ssortingng, ".-")) 

(Ce qui précède ne comprend pas tous les cas, en montrant seulement quelques exemples)

Existe-t-il un moyen plus simple de vérifier la string pour une mathématique de deux caractères spécifiques dans une rangée dans n'importe quel ordre?

Merci!

Valider contre les symboles autorisés:

 if (preg_match("/[^A-Za-z0-9.,_-]/", $ssortingng)){ throw new Exception("Illegal characters in username"); } 

Vérifiez si deux ou plus de points de ponctuation sont à côté de l'autre:

 if (preg_match("/[.,_-]{2,}/", $ssortingng)){ throw new Exception("Two or more nearby punctuation symbols are not allowed in username"); } 

Vous pouvez utiliser preg_match () :

 if(preg_match('/\.{2,}|([^a-zA-Z0-9_\-\.]+)/', $username) { // invalid username } else { // the username is valid } 

Le regex finda un nom d'user invalide: au less deux points consécutifs, ou un caractère en dehors de la list des autorisés.