2013-10-04 3 views
1

Мне нужно объединить два куска регулярного выражения. Тот, который проверяет, что начало строки http:// или https://, и та, которая предотвращает запятые.Объединение двух частей регулярного выражения

ValidationExpression="(\b(http://|https://)\S*)?" 

ValidationExpression="[^,]" 

Просто добавив их вместе, похоже, не работает.

ValidationExpression="(\b(http://|https://)[^,]\S*)?" 

EDIT
Я понимаю, что я был немного расплывчатым здесь. Да, я хочу, чтобы все выражение будет необязательным (это поле должно быть факультативным в моей форме)

+0

Я думаю, что [слово граничное якорь] (http://www.regular-expressions.info/wordboundaries.html) в начале не требуется, поскольку регулярное выражение будет применено к полной строке, не так ли? Кроме того, ваше намерение сделать все выражение необязательным? –

+0

Да, все выражение должно быть необязательным. – Niklas

+0

Выполнение целого поля необязательно не должно выполняться через Regex. Вы можете легко сделать это с помощью тривиальных строковых функций, таких как 'IsNullOrEmpty()' и т. Д. – dotNET

ответ

2

Вы должны объединить character classes, и вам не нужно чередование, когда простой ? будет делать:

ValidationExpression="(\bhttps?://[^,\s]*)?" 

[^\s] означает то же, что и \S, поэтому [^,\s] соответствует любому символу, который не является ни запятой, ни символом пробела.

+0

+1 для хорошего объяснения и для того, чтобы быть наиболее активным. – Niklas

0

Выражение должно более вероятно, будет:

https?://[^,\s]* 

Вы, вероятно, не хотите, чтобы все выражение необязательно, поэтому удалить? вокруг всего выражения.

+1

Я думаю, что полное выражение необязательное (т. Е. Позволяющее ни ничего, ни «правильную» строку) имеет больше смысла, чем разрешение пустого 'http: //'. Но это всего лишь предположение и зависит от требований Никласа, которые являются туманными. –

2

TRY ЭТО:
картина: ^https?://[^,]+$
матча:
ok - http://aaa/bbb/ccc
ok - https://aaa/bbb/ccc
false - http://aaa/bbb/,/ccc
false - https://aaa/bbb/,/ccc

ИЛИ

картина:

текст:
http://aaa/bbb/,/ccc https://abecadlo/123/
матчи:
http://aaa/bbb/ https://abecadlo/123/

0
Uri uri; 
bool isValid=Uri.TryCreate(url,UriKind.Absolute,out uri); 
if(isValid)//valid 
else //invalid 
Смежные вопросы