2009-08-07 11 views
0

J'ai une application Web qui prend l'entrée d'un utilisateur, généralement sous la forme d'un chemin de fichier, d'un lien hypertexte ou d'un partage de fichiers, mais pas toujours. Un utilisateur peut entrer "\ my.fileshare.com", "http://www.msdn.com", ou "Dans mon fichier cabinent". Ces entrées sont exportées dans un fichier Excel. Toutefois, si l'entrée est sous la forme "\ look sur mon bureau" ou "http://here il est" (notez les espaces), après que le fichier est exporté et ouvert, Excel soulève le message d'erreur toujours si descriptif de, et je citation, "Erreur". J'ajoute au code existant un validateur d'expression régulière dans la zone de texte dans laquelle l'utilisateur saisit et modifie ces emplacements. Étant donné qu'il existe un grand nombre d'entrées existantes, le validateur doit être le plus spécifique possible, et uniquement lancer les entrées qui provoquent la rupture de l'exportation Excel. Par exemple "\ Will Work" fonctionnera, tout comme "Will Work", et "\ This \ fonctionnera aussi". J'ai besoin d'une expression régulière que si la chaîne commence par \, http: //, https: //, ftp: //, ftps: //, le nom du serveur ou du partage de fichiers ne contient pas d'espace, et s'il le fait pas commencer par le \, http: //, https: //, ftp: //, ftps: //, son bien malgré tout.Hyperlien de validation d'Expression régulière pour l'exportation vers Excel

Je suis capable d'écrire la première partie ^ (\\) [^ \] + (\ .) $ |^(((ht | f) tp (s)): //) [^ /] + (/. ) $

mais je ne peux pas comprendre comment dire tout ignorer s'il ne commence pas par \, http: //, https: //, ftp://, ftps: //.

Répondre

1
^(?:(?:\\|(?:ht|f)tps?://)\S+|(?!\\|(?:ht|f)tps?://).*)$ 

Expliqué:

 
^         # start-of string 
    (?:        # begin non-capturing group 
    (?:\\|(?:ht|f)tps?://)\S+  # "\, http, ftp" followed by non-spaces 
    |        # or 
    (?!\\|(?:ht|f)tps?://).*  # NOT "\, http, ftp" followed by anything 
)        # end non-capturing group 
$         # end-of-string 

C'est regex pur, non échappés. Ajoutez du caractère qui s'échappe selon les règles de votre environnement.

0

EDIT: Oups prématurée.

Cette expression ne permet pas encore "http://www.google.com/hello monde":/

EDIT POUR UNE TROISIÈME FOIS

On y va!

^(?: (?: \\ | (?: Ht | f) tps?: //) [^/\] + ([/ \]. )? | (?! \\ | (?: ht | f) tps?: //).)