Donnez vie à vos documents numériques !
 

Expression regulière

abracadabraPDF Forums PDF – Général Expression regulière

  • Créateur
    Sujet
  • #74996
    michel c.
    Participant

    Bonjour, j’ai un souci avec le script verifier (ligne 29) du document joint.

    Ce script vérifie le contenu du champ R.a.b (la ou les réponses attendue) au champ Q.a.b (la réponse saisie par l’élève)

    Si plusieurs orthographes sont acceptées alors on sépare les réponses acceptées par le caractère | dans le champ R.a.b

    Pour la vérification de la page 3, je souhaite que la bonne réponse dans le champ R.3.24 soit le caractère ?

    Et cela stoppe l’exécution du script avec le message suivant :

    Doc:Open:29: SyntaxError: nothing to repeat
    ^?$
    .^

    Comment modifier cette ligne pour que le caractère “?” puisse être accepté ?

    Merci

    Document Joint

     

    • Ce sujet a été modifié le il y a 2 mois et 2 semaines par michel c..
    • Ce sujet a été modifié le il y a 2 mois et 2 semaines par michel c..
Affichage de 12 réponses de 1 à 12 (sur un total de 12)
  • Auteur
    Réponses
  • #75001
    bebarth
    Maître des clés

    bonjour,
    Je n’ai pas d’erreur lorsque je clique sur “Vérifier” de ton document !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #75003
    Merlin
    Maître des clés

    Bonjour

     

    Essaie de remplacer le “?” par son équivalent en Unicode :

    \u003F

    #75011
    michel c.
    Participant

    Bonjour, et merci pour les réponses


    @BB

    Ce n’est pas cette question qui pose problème.

    C’est la vérification à la page 3 par le bouton vérifier.3.0

    @ Merlin : Effectivement si je saisis “\u003F” dans le champ R.3.24 cela ne pose plus de problème.

    Cependant, je compte partager une base de ce formulaire pour que chaque prof puisse créer facilement des pdf “interactifs”. Leur demander de saisir de l’unicode me parait un peu délicat.

    N’y a-t-il pas une autre solution?

     

    Merci

    • Cette réponse a été modifiée le il y a 2 mois et 2 semaines par michel c..
    • Cette réponse a été modifiée le il y a 2 mois et 2 semaines par michel c..
    • Cette réponse a été modifiée le il y a 2 mois et 2 semaines par michel c..
    #75021
    michel c.
    Participant

    Parfois je suis obligé de passer par l’unicode…

    Dans un autre formulaire je dois saisir \u0064\u0072\u006f\u0069\u0074\u0065\u0020\u0046\u0028\u0078\u0029 au lieu de droite P'(x) dans un champ R.a.b

    ça complique un peu les choses mais je suppose qu’il n’y a pas d’autre solution…

    #75022
    Merlin
    Maître des clés

    Au lieu de

    droite P'(x)

    essaie avec

    droite P\'\(x\)

    ou avec

    droite P\\'\\(x\\)

    Par fois deux antislash valent mieux qu’un seul.

    #75023
    michel c.
    Participant

    Je suis en train petit à petit de voir quels caractères posent problème dans les champs R.a.b pour savoir si c’est gênant :

    Les parenthèses : erreur à la console et arrêt du script
    Le crochet [ : erreur à la console et arrêt du script
    Le crochet ] : n’a pas l’air de poser problème

    Si la réponse dans le champ R.a.b est écrite entre parenthèses ; entre {} ; entre [] , la réponse saisie dans le champ Q.a.b ne sera pas acceptée même si elle est correcte
    même si c’est la même que celle contenue dans le champ Q.a.b

    Les caractères accentués ne semblent pas poser problème

    Dans ma matière les réponses attendues sont parfois entre parenthèses ou accolades.

    Je sais que j’ai l’option de l’unicode.

    Sinon j’ai une possibilité d’apporter une petite modif à mon script. Il me manque une info pour cela :

    Comment coder :

    • si le caractère | est présent dans la valeur du champ R.a.b
    • si le caractère | est absent dans la valeur du champ R.a.b

    Je pensais à cela :

    var regex = /(|)/g

    if (regex .test(this.getField("R."+n+"."+a).value)) {......}

    else {.....}

    Mais sans grande conviction

    Mon idée c’est que si le caractère | est absent cela veut dire qu’il n’y a qu’une seule réponse attendue et dans ce cas je compare les valeurs des champs Q.a.b et R.a.b de façon simple et dans ce cas je peux m’autoriser certains caractères

    Si le caractère | est présent alors j’exécute ce code :

    for (var k=0; k<rep.length; k++) {
    var RegExTest=new RegExp(“^”+rep[k]+”$”);
    if (RegExTest.test(this.getField(“Q.”+n+”.”+a).value)) {…}}

    Pour comparer mes champs Q.a.b et R.a.b et dans ce cas, j’utiliserai l’unicode si je souhaite inclure ces caractères…

    Merci

    Attachments:
    You must be logged in to view attached files.
    #75027
    bebarth
    Maître des clés

    bonjour,
    Essaye :

    var RegExTest=new RegExp("^"+rep[k].replace(/[(){}\[\]]/g,"\$")+"$");

    Je ne peux pas vérifier ce soir… Tu me dis !

    @+
    😎

    #75028
    Merlin
    Maître des clés

    Les parenthèses : erreur à la console et arrêt du script
    Le crochet [ : erreur à la console et arrêt du script
    Le crochet ] : n’a pas l’air de poser problème

    Parenthèses et crochets sont utilisés en JavaScript comme délimiteurs de string et d’array, c’est pour ça qu’il faut les échapper (escape) avec un antislash quand ils sont utilisés dans une chaîne de caractères (string).

    #75029
    bebarth
    Maître des clés

    C’est ce que devrait faire la ligne que j’ai modifiée.

    @+
    😎

    #75032
    michel c.
    Participant

    Bonjour, cela ne fonctionne toujours pas. Le point d’interrogation entre crochet ne fonctionne plus non plus, cela provoque une erreur à la console.

    Je n’ai aucun souci pour passer par de l’unicode mais je pense que mes collègues à qui je vais fournir ce fichier risquent de trouver ça compliqué… Sauf s’ils n’ont pas comme moi des réponses attendues entre parenthèses ou entre crochets ou encore un point d’interrogation.

     

    • Cette réponse a été modifiée le il y a 2 mois et 2 semaines par michel c..
    Attachments:
    You must be logged in to view attached files.
    #75035
    bebarth
    Maître des clés

    bonjour,
    J’y était presque… mais je n’avais pas d’ordinateur hier soir pour vérifier. En fait c’est :
    var RegExTest=new RegExp("^"+rep[k].replace(/([(){}\[\]])/g,"\\$1")+"$");
    Un double antislash pour indiquer qu’on veut le caractère \ et $1 pour récupérer le caractère capturé dans l’expression entre parenthèses (un des caractères entre crochets où les crochets sont eux-mêmes échappés pour indiquer qu’on parle des caractères…). C’est simple, non ?

    @+
    😎

    • Cette réponse a été modifiée le il y a 2 mois et 2 semaines par bebarth.
    Attachments:
    You must be logged in to view attached files.
    #75038
    michel c.
    Participant

    C’est magique !

    Merci

Affichage de 12 réponses de 1 à 12 (sur un total de 12)
  • Vous devez être connecté pour répondre à ce sujet.