2016-01-20 1 views
-4

Comment puis-je construire un masque qui permet alphanumériques et un seul espace comme:Regex en PHP qui permet alphanumérique avec un seul espace

MM56M pass 
MM 54M pass 
MMM 5 
555555 pass 
LPOLKG pass 
MM 5T YU does not pass 

Merci

+2

Voir [Apprendre les expressions rationnelles] (http://stackoverflow.com/a/2759417/3832970). –

+0

pourquoi ne pas simplement compter les espaces et vérifier, si plus de 1? (sans regex) –

+0

J'ai besoin aussi comme alphanumérique –

Répondre

2

Est-ce que ce travail:

^[A-Za-z0-9]+([A-Za-z0-9]+)?$ 

Il correspond à une ou plusieurs lettres ou chiffres éventuels, éventuellement un espace et une ou plusieurs lettres ou chiffres quelconques

+0

Vous voudriez aussi ancrer le début/la fin de la chaîne, sinon cela correspondra à n'importe quelle sous-chaîne et passera validation. En outre, OP ne dit pas, mais est l'espace requis. –

+0

mon mal, je l'espère fixé @oussamakamal – RedLaser

0
Cette

regex devrait fonctionner ...

/^[[:alnum:]]+([[:alnum:]]+)?$/ 

Demo: https://regex101.com/r/hQ6fM4/2 (non le modificateur g utilisé ici ne sera pas utilisé en PHP, si la chaîne est l'utilisation de plusieurs lignes le m de sorte que le ^$ affectent chaque ligne). Le [[:alnum:]] est un support de caractères posix pour un caractère alpha ou numérique. Le + après est un quantificateur qui signifie un ou plusieurs de ces caractères. Les ^$ sont des ancres le ^ est le début de la chaîne, le $ est la fin. Le () est un regroupement et le ? après rend tout ce deuxième groupe facultatif. Les / délimitent l'endroit où l'expression régulière commence et se termine.

ou si vous voulez une approche étrange:

$str = 'test test'; 
$post = preg_replace('/\s/', '', $str); 
if (((strlen($str) - 1) == strlen($post) || (strlen($str) == strlen($post))) && ctype_alnum($post)) { 
echo 'tis good'; 
} else { 
echo 'rut row'; 
} 

Démo: https://eval.in/505494