Une particularité de l'attribut pattern est que les ancres de début et de fin sont implicites (sauf erreur de ma part), donc out les ^ et $. Pour ce qui est de limiter les slashes à deux occurrences, tu peux finir ta pattern par (/[a-zA-Z0-9-]*){0,2} et le tour est joué:
<input type="text" pattern="[a-zA-Z0-9-]*(/[a-zA-Z0-9-]*){0,2}" />
Néanmoins ta description est quelque peu floue et laisse des questions en suspens:- L'entrée peut-elle être vide?
- Les lettres majuscules sont-elles autorisées?
- Est-ce que deux slashes ou deux tirets ou un slash et un tiret ou un tiret et un slash peuvent se suivre?
- Est-ce que la chaîne peut commencer ou finir avec un slash ou un tiret?
- Est-ce que la chaîne ne peut contenir aucune lettre et aucun chiffre lorsqu'elle est non-vide?
---
Par rapport à ta pattern, écrire [a-z0-9-/{0,2}] n'a pas de sens car les crochets définissent une classe de caractères, c-à-d une sélection de caractères. Dans cette sélection l'ordre n'a aucune importance et les caractères qui habituellement ont un sens spécial dans une pattern, le perdent et sont vus comme des caractères "normaux". Donc écrire {0,2} dans un classe de caractères, c'est comme écrire }2,0{ ou 02,{} ou l'ordre que tu veux. Un classe de caractère, ça signifie: "un caractère, n'importe lequel, parmi ceux qu'il y a entre crochets".
Autre chose, comme dans une classe de caractère le tiret a une signification spécial (on l'utilise pour définir des intervalles de caractères comme a-z), il est préférable de le placer en début ou en fin de classe pour éviter toute ambiguïté lorsque qu'on veut l'inclure dans la classe. (on peut aussi le mettre n'importe où et l'échapper, mais c'est moins smart.)
Partager