Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

gestion des raccourcis

44 réponses
Avatar
J-F Portala
Bonjour,
je me pose la question suivante:

est il possible d'utiliser les touches F1 à F12 comme raccourcis clavier
dans un formulaire.
Les touches F5, F6 etc correspondant à un submit particulier, c'est à dire
que la gestion du submit tient compte de la touche qui a été pressée.
C'est pour éviter d'utiliser la souris ou les touhces tab pour valider un
submit particulier.

J'ai vu sur le net des accesskey mais il faut utiliser la touche alt en
combinaison.

Y a t il des solutions?

Merci de votre aide

Jeff

10 réponses

1 2 3 4 5
Avatar
Olivier Miakinen
Bonjour,

Le 05/01/2009 15:57, Pierre Goiffon a écrit :

Utiliser l'excellentissime Regulator :
http://regulator.sourceforge.net/



C'est tout en anglais... :-(

Sais-tu s'il est possible de choisir le type d'expressions rationnelles
reconnues, et lequel est pris par défaut ? Vu qu'il comprend « (?=...) »
comme une assertion, on peut supposer que c'est Perl ou PCRE, mais je ne
sais pas lequel des deux.

Une fonctionnalité permet de passer d'une pattern à un texte
intelligible, et pour :

/^[0-9+-]?[0-9]+(.(?=[0-9])[0-9]{0,2})$/

On obtient :

/^ (anchor to start of string)
Any character in "0-9+-"



Il serait intéressant de savoir si le caractère « » fait partie des
caractères reconnus, ou si « + » est interprété comme un simple « + »
et « - » comme un simple « - ».

? (zero or one time)
Any character in "0-9"
+ (one or more times)
Capture
.
zero-width positive lookahead
Any character in "0-9"
End Capture



Ah non, ça c'est faux, du moins dans PCRE (mais je suppose qu'il en va
de même pour Perl) : une assertion n'est pas capturante, et donc la
parenthèse fermante d'une assertion n'est pas un « End Capture ».

Any character in "0-9"
At least 0, but not more than 2 times
End Capture
$ (anchor to end of string)/



Ok pour le reste.
Avatar
SAM
Le 1/5/09 6:51 PM, Olivier Miakinen a écrit :
Bonjour,

Le 05/01/2009 15:57, Pierre Goiffon a écrit :
Utiliser l'excellentissime Regulator :
http://regulator.sourceforge.net/



C'est tout en anglais... :-(



Surprised ?

Beurk de beurk c'est pour Windows :-(
(et encore une fois faut télécharger des Mo et les dézipper pour
l'apprendre :-( )
Et ... kesskecé ces 17 DLL ?

Sais-tu s'il est possible de choisir le type d'expressions rationnelles
reconnues, et lequel est pris par défaut ? Vu qu'il comprend « (?=...) »
comme une assertion, on peut supposer que c'est Perl ou PCRE, mais je ne
sais pas lequel des deux.



En tous cas, celle-là : (?:x)
mon Fx ne sait quoi en faire :-(
Enfin si,
mais ce n'est pas ce qu'on attend de lui,
le 'x' est bien retenu, capturé.

/^[0-9+-]?[0-9]+(.(?=[0-9])[0-9]{0,2})$/

On obtient :

/^ (anchor to start of string)
Any character in "0-9+-"



Il serait intéressant de savoir si le caractère « » fait partie des
caractères reconnus, ou si « + » est interprété comme un simple « + »
et « - » comme un simple « - ».



Par quoi ? Par qui ?
Le "Regulator" doit se contenter de citer ce qui est écrit, pas
d'interpréter n ou xa0 ou quoit'else du genre. (à mon idée)

? (zero or one time)
Any character in "0-9"
+ (one or more times)
Capture
.
zero-width positive lookahead
Any character in "0-9"
End Capture



Ah non, ça c'est faux, du moins dans PCRE (mais je suppose qu'il en va
de même pour Perl) : une assertion n'est pas capturante, et donc la
parenthèse fermante d'une assertion n'est pas un « End Capture ».



Pourtant c'était supposé le faire (et ça le fait)
.(?=[0-9]) le . est bien capturé s'il est suivi d'un nombre ;-)
Cependant la "capture" (?...) n'est pas retenue dans le résultat
ce serait donc donc une "non capture"

En tous cas MDC parle de ( ) non capturantes (en fr comme en en)
<https://developer.mozilla.org/fr/R%C3%A9f%C3%A9rence_de_JavaScript_1.5_Core/Objets_globaux/RegExp>

Ce n'est peut-être pas facile pour un programme de faire le distinguo ?
Cette parenthèse ouvrante là
est-elle un début de capture ou de non-capture ?
Cette parenthèse fermante là, pareil: capture ou non?

Any character in "0-9"
At least 0, but not more than 2 times
End Capture
$ (anchor to end of string)/



Ok pour le reste.



Globalement il ne se débrouille pas plus mal que moi ;-)
(quand c'est moi qui ai pondu l'expression, parce que sinon ça me reste
encore très ardu le décryptage de ces successions de zigouigouis).
cf post : Sat, 27 Dec 2008 03:51:36 +0100

--
sm
Avatar
Pierre Goiffon
Olivier Miakinen wrote:
Utiliser l'excellentissime Regulator :
http://regulator.sourceforge.net/



Sais-tu s'il est possible de choisir le type d'expressions rationnelles
reconnues, et lequel est pris par défaut ?



C'est une bonne question, que je n'avais encore jamais eu besoin de me
poser :)

La doc n'est pas très claire à ce sujet, il semble que ça soit un format
spécifique Microsoft... Le hlp renvoit vers cette page sur le MSDN :
http://msdn.microsoft.com/en-us/library/az24scfc.aspx
En suivant les liens on tombe sur :
http://msdn.microsoft.com/en-us/library/hs600312.aspx
"Microsoft .NET Framework regular expressions incorporate the most
popular features of other regular expression implementations such as
those in Perl and awk. Designed to be compatible with Perl 5 regular
expressions, .NET Framework regular expressions include features not yet
seen in other implementations, such as right-to-left matching and
on-the-fly compilation."

Une fonctionnalité permet de passer d'une pattern à un texte
intelligible, et pour :





Je précise que ce n'est pas la fonctionnalité qui me fait utiliser cet
outil : je m'en sert avant tout pour tester une expression par rapport à
des exemples, un fichier existant, voir ce qui est capturé, etc. Pour ce
besoin de mise au point de pattern c'est tout à fait l'outil que je
cherchais depuis que j'ai commencé à me mettre aux regexp.

Il serait intéressant de savoir si le caractère « » fait partie des
caractères reconnus, ou si « + » est interprété comme un simple « + »
et « - » comme un simple « - ».



Je ne comprend pas ta question ? "" est un caractère d'échappement non ?
Sur +- le regexp analyser renvoie +-

? (zero or one time)
Any character in "0-9"
+ (one or more times)
Capture
.
zero-width positive lookahead
Any character in "0-9"
End Capture



Ah non, ça c'est faux, du moins dans PCRE (mais je suppose qu'il en va
de même pour Perl) : une assertion n'est pas capturante, et donc la
parenthèse fermante d'une assertion n'est pas un « End Capture ».



Oui, ça devrait être un "end zero-width positive lookahead" ou quelque
chose du genre.
Avatar
Olivier Miakinen
Le 06/01/2009 14:58, Pierre Goiffon a écrit :

Utiliser l'excellentissime Regulator :
http://regulator.sourceforge.net/



Sais-tu s'il est possible de choisir le type d'expressions rationnelles
reconnues, et lequel est pris par défaut ?



C'est une bonne question, que je n'avais encore jamais eu besoin de me
poser :)

La doc n'est pas très claire à ce sujet, il semble que ça soit un format
spécifique Microsoft... Le hlp renvoit vers cette page sur le MSDN :
http://msdn.microsoft.com/en-us/library/az24scfc.aspx
En suivant les liens on tombe sur :
http://msdn.microsoft.com/en-us/library/hs600312.aspx
"Microsoft .NET Framework regular expressions incorporate the most
popular features of other regular expression implementations such as
those in Perl and awk. Designed to be compatible with Perl 5 regular
expressions, .NET Framework regular expressions include features not yet
seen in other implementations, such as right-to-left matching and
on-the-fly compilation."



Merci pour cette recherche. Cela semble effectivement proche de la
syntaxe de Perl 5, et donc de celle utilisée dans JavaScript. Il
faut bien sûr tenir compte des « features not yet seen in other
implementations ». Et pour PCRE (utilisé par PHP) il y a encore
quelques autres différences.

Je ne comprend pas ta question ? "" est un caractère d'échappement non ?



Pas partout, qu'il s'agisse des chaînes de caractères ou des expressions
rationnelles elles-mêmes.

Tout d'abord, dans les chaînes de caractères, selon le langage ou le
type de chaîne, un suivi d'un caractère non spécial (tel que + ou -)
sera soit supprimé, soit laissé. Ainsi, '+-' ou "+-" pourra être
selon les cas une chaîne de 2 caractères ou de 4 caractères (voire de 3
si un seul des deux caractères + et - est considéré comme spécial).

Par ailleurs, le caractère + est un caractère spécial en dehors des
classes de caractères, mais pas à l'intérieur ; c'est l'inverse pour
le caractère -. En dehors d'une classe de caractères, on échappe le +
par + ; à l'intérieur d'une classe de caractères, on met le caractère
- au début ou à la fin pour lui ôter son rôle spécial. En revanche, je
ne me rappelle pas avoir lu comment devaient être interprétés + et -
à l'intérieur d'une classe de caractères. Je vais chercher (dans PCRE
car c'est la doc que je sais trouver le plus facilement).

Sur +- le regexp analyser renvoie +-



À l'intérieur ou à l'extérieur d'une classe de caractères ?

[...] la parenthèse fermante d'une assertion n'est pas un « End Capture ».



Oui, ça devrait être un "end zero-width positive lookahead" ou quelque
chose du genre.



Oui.
Avatar
Pierre Goiffon
Olivier Miakinen wrote:
Je ne comprend pas ta question ? "" est un caractère d'échappement non ?



Pas partout, qu'il s'agisse des chaînes de caractères ou des expressions
rationnelles elles-mêmes.

Tout d'abord, dans les chaînes de caractères, selon le langage ou le
type de chaîne, un suivi d'un caractère non spécial (tel que + ou -)
sera soit supprimé, soit laissé. Ainsi, '+-' ou "+-" pourra être
selon les cas une chaîne de 2 caractères ou de 4 caractères (voire de 3
si un seul des deux caractères + et - est considéré comme spécial).



Pas sûr de comprendre ?
En Php je crois me rappeler qu'une chaine de caractère n'aura pas le
même comportement suivant qu'on l'entoure de " ou '. Est-ce quelque
chose d'identique ? Pourtant j'aurais imaginé qu'on utilise la pattern
pour la passer directement au "moteur de regexp" ?

Dans le cas de Regulator :

"+-" donne "+-"
et '+-' donne '+-'

Je suppose donc que " comme ' ne sont pas considérés comme délimiteurs
de chaîne mais bien comme de simples caractères.
Avatar
Olivier Miakinen
Le 08/01/2009 12:18, Pierre Goiffon a écrit :

Je ne comprend pas ta question ? "" est un caractère d'échappement non ?



Pas partout, qu'il s'agisse des chaînes de caractères ou des expressions
rationnelles elles-mêmes.

Tout d'abord, dans les chaînes de caractères, selon le langage ou le
type de chaîne, un suivi d'un caractère non spécial (tel que + ou -)
sera soit supprimé, soit laissé. Ainsi, '+-' ou "+-" pourra être
selon les cas une chaîne de 2 caractères ou de 4 caractères (voire de 3
si un seul des deux caractères + et - est considéré comme spécial).



Pas sûr de comprendre ?
En Php je crois me rappeler qu'une chaine de caractère n'aura pas le
même comportement suivant qu'on l'entoure de " ou '. Est-ce quelque
chose d'identique ?



Il y a de l'idée, même si en l'occurrence la différence de comportement
n'est pas entre les deux syntaxes de PHP, mais plutôt entre JavaScript
et PHP.

En PHP, les chaînes "a+" et 'a+' sont constituées de trois caractères,
à savoir « a », « » et « + ». En JavaScript, les mêmes chaînes sont
constituées de deux caractères uniquement, à savoir « a » et « + ».

Pourtant j'aurais imaginé qu'on utilise la pattern
pour la passer directement au "moteur de regexp" ?



Ce à quoi il faut prendre garde, c'est que (en JavaScript), les deux
expressions suivantes ne produiront pas la même RegExp :

1) var re = /^a+$/;
2) var re = new RegExp('^a+$');

La première des deux teste la présence d'un « a » suivi d'un « + »,
tandis que la seconde teste la présence d'un nombre quelconque (non
nul) de « a ».

De façon similaire, je suis sûr que les trois expressions suivantes
testent la présence d'un « + » et rien d'autre :

3) var re = new RegExp("^[+]$");
4) var re = new RegExp("^[+]$");
5) var re = /^[+]$/;

Mais en revanche je ne suis pas sûr que l'expression qui suit ne
pourrait pas accepter un « » au lieu d'un « + » :

6) var re = /^[+]$/;
Avatar
Pierre Goiffon
Olivier Miakinen wrote:
Ce à quoi il faut prendre garde, c'est que (en JavaScript), les deux
expressions suivantes ne produiront pas la même RegExp :

1) var re = /^a+$/;
2) var re = new RegExp('^a+$');



Ok c'est compris merci !
The regulator ne fait pas ces distinctions, je suppose que la pattern
est comprise comme si elle était exprimée entre / et /
Avatar
SAM
Le 1/8/09 11:49 PM, Olivier Miakinen a écrit :

En PHP, les chaînes "a+" et 'a+' sont constituées de trois caractères,
à savoir « a », « » et « + ». En JavaScript, les mêmes chaînes sont
constituées de deux caractères uniquement, à savoir « a » et « + ».



Salut, je profite de ce que tu en parles,
j'ai téléchargé un fichier php d'analyse de regexpr qui utilise aussi le
JS :
<http://jack.r.free.fr/download/php/regexp_view.zip>
et j'ai finalement réussi à en faire un peu qque chose.
Cependant je n'y comprends pas trop dans la façon d'y énoncer
l'expression à rechercher :
- les / d'encloisonnement de l'expression n'ont pas l'air d'y faire
- il apparait qu'il faille mettre |expression|s
si tu as un instant ?

Ce à quoi il faut prendre garde, c'est que (en JavaScript), les deux
expressions suivantes ne produiront pas la même RegExp :

1) var re = /^a+$/;
2) var re = new RegExp('^a+$');



Sur la même idée que le php ci-haut :
<http://stephane.moriaux.pagesperso-orange.fr/truc/js_regexp_test>
Où j'aimerais qu'on m'aide à résoudre la démo "contenu de balises"
qui capte les '>' et '<' dont j'aimerais me passer


Mais en revanche je ne suis pas sûr que l'expression qui suit ne
pourrait pas accepter un « » au lieu d'un « + » :

6) var re = /^[+]$/;



ça donne 'null' sur ma démo

--
sm
Avatar
Olivier Miakinen
Le 09/01/2009 14:24, SAM a écrit :

En PHP, les chaînes "a+" et 'a+' sont constituées de trois caractères,
à savoir « a », « » et « + ». En JavaScript, les mêmes chaînes sont
constituées de deux caractères uniquement, à savoir « a » et « + ».



Salut, je profite de ce que tu en parles,
j'ai téléchargé un fichier php d'analyse de regexpr qui utilise aussi le
JS :
<http://jack.r.free.fr/download/php/regexp_view.zip>
et j'ai finalement réussi à en faire un peu qque chose.
Cependant je n'y comprends pas trop dans la façon d'y énoncer
l'expression à rechercher :
- les / d'encloisonnement de l'expression n'ont pas l'air d'y faire
- il apparait qu'il faille mettre |expression|s
si tu as un instant ?



Je regarderai à l'occasion, mais pas tout de suite. Je peux malgré tout
te signaler que les // d'encloisonnement peuvent être remplacés par à
peu près ce que l'on veut : || ou éé ou ¤¤ ou (deux espaces), mais
aussi () ou {} ou [] ou <>. Quant à l'option s, elle permet au méta-
caractère . de compter pour n'importe quel caractère, y compris ceux de
nouvelle ligne (n).

Ce à quoi il faut prendre garde, c'est que (en JavaScript), les deux
expressions suivantes ne produiront pas la même RegExp :

1) var re = /^a+$/;
2) var re = new RegExp('^a+$');



Sur la même idée que le php ci-haut :
<http://stephane.moriaux.pagesperso-orange.fr/truc/js_regexp_test>
Où j'aimerais qu'on m'aide à résoudre la démo "contenu de balises"
qui capte les '>' et '<' dont j'aimerais me passer



Tu avais écrit :
(?:>)[ w_.:+,;0-9]+(?:<)
Résultat :
Pour les programmeurs<
Version 0.6<


...

On peut déjà commencer par virer les inutiles :
(?:>)[ w_.:+,;0-9]+(?:<)
Résultat :
Pour les programmeurs<
Version 0.6<


...

Maintenant remplaçons le test non capturant de fin par une assertion
positive avant :
(?:>)[ w_.:+,;0-9]+(?=<)
Résultat :
Pour les programmeurs
Version 0.6


...

Remplaçons le test non capturant du début par une assertion positive
arrière :
(?<=>)[ w_.:+,;0-9]+(?=<)
Résultat :
(vide)

Ah zut, ça doit être l'une des différences entre Perl et PCRE. Cela dit,
on peut faire plus malin :
[^<>]*w[^<>]*(?=<)
Résultat :
Pour les programmeurs
Version 0.6
...

Mais en revanche je ne suis pas sûr que l'expression qui suit ne
pourrait pas accepter un « » au lieu d'un « + » :

6) var re = /^[+]$/;



ça donne 'null' sur ma démo



Ok, donc /^[+]$/ est équivalent à /^[+]$/ et pas à /^[+]$/.
Avatar
SAM
Le 1/9/09 3:19 PM, Olivier Miakinen a écrit :
Le 09/01/2009 14:24, SAM a écrit :
<http://stephane.moriaux.pagesperso-orange.fr/truc/js_regexp_test>
Où j'aimerais qu'on m'aide à résoudre la démo "contenu de balises"
qui capte les '>' et '<' dont j'aimerais me passer



Tu avais écrit :
(?:>)[ w_.:+,;0-9]+(?:<)



Oui.

On peut déjà commencer par virer les inutiles :
(?:>)[ w_.:+,;0-9]+(?:<)



Je croyais que le point remplaçait n'importe quel caractère !
Comment se fait-ce qu'il ne faille pas l'échapper ici ?

Maintenant remplaçons le test non capturant de fin par une assertion
positive avant :
(?:>)[ w_.:+,;0-9]+(?=<)
Résultat :
>Pour les programmeurs
>Version 0.6



Ha! celui-là je l'avais trouvé ;-)

Remplaçons le test non capturant du début par une assertion positive
arrière :
(?<=>)[ w_.:+,;0-9]+(?=<)
Résultat :
(vide)



Eh oui !
(ne figure pas ici
:<https://developer.mozilla.org/index.php?title=Fr/R%C3%A9f%C3%A9rence_de_JavaScript_1.5_Core:Objets_globaux:RegExp>
)

Et alors, pour finir, qu'est-ce qu'un test "non capturant" ?
puisque : (?:>)
conserve le >
(Fx, Safari)

on peut faire plus malin :
[^<>]*w[^<>]*(?=<)



Boudiou !
Outre que j'ai cherché depuis mon postage sans trouver ce sioux là,
je n'ai pas réussi à faire fonctionner le "Regulator"
et ... quoi? quoi? quoi ?
- je commence pas ne pas vouloir < ni > (0 fois ou plus)
je m'étais contenté de [^s>]
- puis je veux tous les alphanumériques et le _
bon, ok
- ensuite je ne reveux pas < ni >
ben non! pour sûr (mais, à mon idée ça ne sert à rien puisque suite)
- le tout à condition de ne pas être suivi par un <
J'ai beau arriver à lire (du moins pense-je) je ne vois pas ce que c'est
censé faire (même si je vois ce que ça fait)

Résultat :
Pour les programmeurs
Version 0.6



tu arrives comme ça à attraper 'test_06.zip' qui m'échappait
mais les ligne-retours et tabulations sont conservées
Je n'arrive pas à les supprimer, ça me tue ! :-(


Mais en revanche je ne suis pas sûr que l'expression qui suit ne
pourrait pas accepter un « » au lieu d'un « + » :

6) var re = /^[+]$/;


ça donne 'null' sur ma démo





Ha! Ben ? normal, le string de test n'était pas '+' tout seul :-(

Ok, donc /^[+]$/ est équivalent à /^[+]$/ et pas à /^[+]$/.



Sur ma démo mise à '+' cette fois,
y fonctionnent :
^[+]$
ou (ton équivalence) :
^[+]$
ou même directement :
^+$


--
sm
1 2 3 4 5