Expression régulière : tout sauf .. ... .... etc.

Expression régulière : tout sauf .. ... .... etc. - Divers - Programmation

Marsh Posté le 03-09-2021 à 10:40:50    

Bonsoir à toustes,
 
J'essaie de faire une expression régulière qui va autoriser tout caractère autant de fois qu'on le veut à l'exception du point qui, s'il est présent, ne peut pas être suivi d'un autre point.
 
Une idée de comment faire ? J'ai fait pas mal d'essai mais pas moyen... et il semble que l'opérateur NOT n'existe pas
 
marcel = OK
marcel.com = OK
marcel.co.uk = OK
marcel.. = pas OK
ma...rcel = pas OK
..marcel = pas OK
 
--edit--
C'est pour mettre en pattern d'une balise input en HTML
 
Merci :)


Message édité par zezette le 03-09-2021 à 16:34:00

---------------
"Par moment j'me d'mande si chui pas con" G. de Suresnes
Reply

Marsh Posté le 03-09-2021 à 10:40:50   

Reply

Marsh Posté le 03-09-2021 à 14:08:00    

Bonjour,
 
Quel langage ?
Quel moteur d'expressions régulières ?
Pourquoi ne pas chercher si deux points se suivent et si vrai alors interdire la chaîne, plutôt que de chercher une chaîne sans deux points qui se suivent pour l'autoriser ?
 
Le NOT est généralement le circonflexe utilisé dans les crochets : [^\.]


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 03-09-2021 à 14:29:56    

Je dirais  /^[^.]*(\.[^.]*)?$/ à priori, modulo les particularités du langage que vous utilisez (la c'est du pcre)
EDIT: Ah, pas directement suivi d'un autre point /^[^.]*(\.[^.]+)*\.?$/ alors, ou bien, solution avec du lookahead, /([^.]|(\.(?!\.)))*$/
Ça répond OK si la chaine est vide, mais c'est facile a adapter si on veut le contraire  /([^.]|(\.(?!\.)))+$/ par exemple

 

Explication de [^.]|(\.(?!\.))
[^.] ou bien (\.(?!\.))
Un caractère autre que . ou bien (\.(?!\.))
Un caractère autre que . ou bien un point suivi d'un contexte décrit par (?!\.)  [contexte car en cas de capture de chaine matchée, il n'est pas dedans]
Un caractère autre que . ou bien un point suivi du contexte "pas (! pour la négation) un point"

 

donc [^.]|(\.(?!\.)) matche un (seul) caractère qui est soit pas un point, soit un point, qui ne doit alors pas être suivi d'un point. CQFD.

 

A+,


Message édité par gilou le 03-09-2021 à 15:06:25

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 03-09-2021 à 16:38:53    

MaybeEijOrNot a écrit :

Bonjour,
 
Quel langage ?
Quel moteur d'expressions régulières ?
Pourquoi ne pas chercher si deux points se suivent et si vrai alors interdire la chaîne, plutôt que de chercher une chaîne sans deux points qui se suivent pour l'autoriser ?
 
Le NOT est généralement le circonflexe utilisé dans les crochets : [^\.]


 
HTML
Je vais tester [^\.]{2,}
 
--edit--
Marche pas, ça interdit le point ; le point est autorisé autant de fois qu'on veut, mais ça successivement


Message édité par zezette le 03-09-2021 à 16:42:16

---------------
"Par moment j'me d'mande si chui pas con" G. de Suresnes
Reply

Marsh Posté le 03-09-2021 à 17:20:50    

En HTML je pense que ce n'est pas possible, le moteur est très basique de souvenir.
 
Au passage, pas besoin de l'antislash \ entre crochets, c'est une erreur de ma part.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 03-09-2021 à 18:59:46    

Dans les inputs, HTML5 autorise des regexp. Maintenant, j'ai jamais vraiment testé si tout est implémenté. Perso, pour l'instant, je teste la validé des valeurs avec JS côté client et PHP côté serveur.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 03-09-2021 à 22:10:57    

MaybeEijOrNot a écrit :

En HTML je pense que ce n'est pas possible, le moteur est très basique de souvenir.
 
Au passage, pas besoin de l'antislash \ entre crochets, c'est une erreur de ma part.

J'ai testé mes expressions dans un input de form form en HTML : https://www.w3schools.com/tags/tryi [...] ut_pattern
en y remplaçant leur code par  
 
<form action="/action_page.php">
  <label for="country_code">Country code:</label>
  <input type="text" id="country_code" name="country_code" pattern="([^.]|(\.(?!\.)))+" title="Not Two dots"><br><br>
  <input type="submit">
</form>
 
et en relançant Run.
 
Ça marche très bien.
 
HTML ces temps ci, c'est comme JS, ça évolue a toute blinde. Il y a quelques années, je me faisais suer a faire des items de listes non standard (il y en avait que 3, circle, disc et square pour les listes non numérotées) avec une box :before au positionnement géré à la mimine. Maintenant, c'est réglè en 2 lignes de CSS ou presque et supporté partout ou presque (parfois Safari est un peu à la traine)
 
A+,


Message édité par gilou le 03-09-2021 à 22:15:20

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed