IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Problème de Regex


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    FMJ
    FMJ est déconnecté
    Membre éclairé
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 417
    Par défaut Problème de Regex
    Bonjour,
    Je souhaiterais vérifier le bon formatage d'un input d'une PS. Il s'agit d'une chaîne qui peut aller de 0 à 11 caractères bien définis, avec un ordre bien défini.
    Ex1: a
    Ex2: f
    Ex3: c;e
    Ex4: a;c;d
    Ex5: a;b;c;d;e;f

    Donc l'exemple 5 montre la plus longue chaîne possible.

    J'aurais bien voulu faire cette vérif avec un LIKE mais il aurait fallu que [] puisse représenter aucun ou un caractère défini, ce qui n'est pas le cas.
    Et quelque chose dans le style n'est pas suffisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @input LIKE '[a-f]' OR @input LIKE '[a-f];[b-f]'  OR @input LIKE '[a-f];[b-f];[c-f]'  OR @input LIKE '[a-f];[b-f];[c-f];[d-f]'  OR @input LIKE '[a-f];[b-f];[c-f];[d-f];[e-f]'  OR @input LIKE 'a;b;c;d;e;f'
    car la chaine 'f;b' passerait cette vérification (alors que c'est 'b;f' qui serait correct).

    A part utiliser une fonction T-SQL bourrine, ou un script vbscript ou CLR, auriez-vous une idée sur une méthode plus élégante ? Je n'aurais pas de problématique de performance.
    Merci.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '^([a-f]{0,1})(;[b-f]){0,1}(;[c-f]){0,1}(;[d-f]){0,1}(;[e-f]){0,1}(;f){0,1}$'

  3. #3
    FMJ
    FMJ est déconnecté
    Membre éclairé
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 417
    Par défaut
    Merci Jet. Oui en "codage" d'expressions régulières ce n'est pas compliqué, le problème c'est que le moteur SQL Server ne comprend qu'une version hyper allégée dans son opérateur LIKE. Donc comme j'écrivais au-dessus, à moins d'implémenter une fonction regex en VBScript ou CLR, je ne vois pas comment faire (pour le coder) ?!
    Parce qu'évidemment il y a la méthode bestiale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF @input  NOT INT ('a;b;c;d;e', 'a;b;c;d', 'a;b;c', 'a;b', 'a', 'b;c;d;e;f', 'b;c;d;e', 'b;c;d', 'b;c', 'b', 'c;d;e;f', 'c;d;e', 'c;d', 'c', 'd;e;f', 'd;e', 'd', 'e;f', 'e', 'f',  .....etc.)
    Ca va pour 6 lettres, mais pour tout l'alphabet ....

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Si la fonction externe est le plus simple...
    au moins elle aura l'avantage de pouvoir être réutilisée ailleurs.

    Si non, dans une hypothétique collection de solutions à la c... :
    vous pouvez transformer la string en JSON array, sélectionner les élements, concaténer le résultat par ordre alphabétique et si le résultat est différent de la chaîne originale, c'est qu'elle ne passe pas la validation.

  5. #5
    FMJ
    FMJ est déconnecté
    Membre éclairé
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 417
    Par défaut
    Excellente idée. Aussitôt mise en musique. C'est moins concis qu'une regex, mais c'est tout en assembliste ! Merci

    Un exemple de code avec 3 jeux de test pour tester les 3 cas de figure : une valeur erronnée (g par ex), une valeur plus d'une fois et enfin un tri qui n'est pas dans le bon ordre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    DECLARE @subdivs VARCHAR(50),  @subdivsVerif VARCHAR(50)
    SET @subdivs='a;b;c;d;e;f;g'
    -- SET @subdivs='a;a;c;d;e;f'
    -- SET @subdivs='b;a;c;d;e;f'
     
    IF EXISTS (SELECT * FROM (SELECT VALUE AS SUBDIV FROM (VALUES (1)) AS T1(a) CROSS APPLY STRING_SPLIT(@subdivs, ';')) T1 WHERE Subdiv NOT LIKE '[a-f]') PRINT 'Valeur erronnée'
     
    IF EXISTS (SELECT Subdiv FROM (SELECT VALUE AS SUBDIV FROM (VALUES (1)) AS T1(a) CROSS APPLY STRING_SPLIT(@subdivs, ';') ) T1 GROUP BY Subdiv HAVING COUNT(*)>1) PRINT 'Valeur en doublon'
     
    IF @subdivs<>STUFF((SELECT ';'+SUBDIV FROM (SELECT VALUE AS SUBDIV FROM (VALUES (1)) AS T1(a) CROSS APPLY STRING_SPLIT(@subdivs, ';') ) T1 ORDER BY 1 FOR XML PATH('') ), 1, 1, '')
    PRINT ' Ordre KO'

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Java] Problème de Regex
    Par spk4ever dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 28/08/2006, 10h51
  2. Problème avec Regex
    Par trihanhcie dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/07/2006, 14h50
  3. problème de regex
    Par lanfeust42 dans le forum Langage
    Réponses: 11
    Dernier message: 12/07/2006, 15h32
  4. Problème avec RegEx et une Query string
    Par Erakis dans le forum Langage
    Réponses: 6
    Dernier message: 08/11/2005, 15h48
  5. Problème de Regex ... avec un point
    Par bugalood dans le forum Langage
    Réponses: 2
    Dernier message: 29/05/2005, 10h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo