Проверка регулярных выражений гиперссылки для экспорта в Excel - PullRequest
0 голосов
/ 07 августа 2009

У меня есть веб-приложение, которое принимает данные от пользователя, обычно в форме пути к файлу, гиперссылки или общего доступа к файлам, но не всегда. Пользователь может ввести «\ my.fileshare.com», «http://www.msdn.com",» или «В моем файле cabent». Эти входные данные экспортируются в файл Excel. Однако, если входные данные имеют вид «\ look» на моем столе "или" http://here это "(обратите внимание на пробелы), после экспорта и открытия файла Excel выдает очень описательное сообщение об ошибке, и я цитирую" Ошибка ".

Я добавляю к существующему коду валидатор регулярных выражений в текстовое поле, в которое пользователь вводит и редактирует эти местоположения. Поскольку существует большое количество существующих записей, валидатор должен быть как можно более конкретным, и только выбрасывать входы, которые приводят к сбою экспорта в Excel. Например, «\ Работать» будет работать, как и «Работать», и «\ Это \ также будет работать». Мне нужно регулярное выражение, что если строка начинается с \, http://, https://, ftp: //, ftps: //, в имени сервера или файлообменника не будет пробела, и если оно не начинается с \, http://, https://, ftp: //, ftps: //, все нормально.

Мне удалось написать первую часть ^ (\\) [^ \] + (\. ) $ | ^ (((ht | f) tp (s)?): //) [^ /]+(/.) $

но я не могу понять, как сказать игнорировать все, если оно не начинается с \, http://, https://, ftp: //, ftps: //.

Ответы [ 2 ]

1 голос
/ 07 августа 2009
 ^(?:(?:\\|(?:ht|f)tps?://)\S+|(?!\\|(?:ht|f)tps?://).*)$

Разъяснения:

^                                 # 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

Это чистое регулярное выражение без отступления. Добавьте экранирование персонажа в соответствии с правилами вашей среды.

0 голосов
/ 07 августа 2009

РЕДАКТИРОВАТЬ: Ooops преждевременно.

Это выражение по-прежнему не допускает "http://www.google.com/hello world": /

РЕДАКТИРОВАТЬ В ТРЕТЬЕ ВРЕМЯ

Вот и мы!

^ (?: (?: \\ | (?: Ht | f) tps?: //) [^ /\]+([/\].)? | (?! \\ | ТПС |: (ХТ е?):?. //) ) $

...