2015-08-26 5 views
2

я должен проверить, содержит ли строка специальные символы или нет, но я могу позволить эти 5 специальных символов .()_-Regex чтобы некоторые специальные символы C#

я написал мое регулярное выражение, как

var specialCharacterSet = "^[()_-.]"; 
var test = Regex.Match("a!", specialCharacterSet); 
var isValid = test.Success; 

но его метание:

ошибка разбора "^ [() _-.]" - [xy] диапазон в обратном порядке.

ответ

4

Вы указали диапазон с -. Поместите его в конце:

[()_.-] 

В противном случае диапазон не является правильным: нижний символ граница _ появляется позже в таблице символов, чем верхняя граница символа .:

enter image description here

Кроме того, если вы планируете проверить, соответствует ли значение символа внутри строки, вы должны удалить ^, который проверяет только в начале строки.

Чтобы проверить, если строка соответствует некоторый рисунок, использовать Regex.IsMatch:

Указывает, находит ли регулярное выражение совпадение в строке ввода.

var specialCharacterSet = "[()_.-]"; 
var test = Regex.IsMatch("a!", specialCharacterSet); 

UPDATE

Чтобы принять любое строковое значение, то не содержит пять символов, вы можете использовать

var str = "file.na*me"; 
if (!Regex.IsMatch(str, @"[()_.-]")) 
    Console.WriteLine(string.Format("{0}: Valid!", str)); 
else 
    Console.WriteLine(string.Format("{0}: Invalid!", str)); 

enter image description here

См IDEONE demo

+0

Таким образом, мое регулярное выражение должно быть var specialCharacterSet = "^ [A-Za-z0-9() _.-] + $"; чтобы разрешить буквенное число и те 5 специальных символов, которые я упомянул –

+0

Если вы планируете сопоставлять любые буквы и цифры Юникода, я предлагаю использовать '\ w', поскольку он соответствует' [\ p {L} \ p {N} _] ': '^ [\ ш() .-] + $ '. Класс категорий '\ p {N}' short Unicode соответствует всем типам цифр, '\ p {L}' соответствует любому типу букв. –

+0

regex должен принять любое строковое значение, которое не содержит пять символов, о которых я упоминаю. Я думаю, что указанное выше выражение, которое я прокомментировал, будет делать. пожалуйста, дайте мне знать, если это не будет –

1
[()_.-] 

Держите - в конце или escape его, чтобы избежать его формирования недопустимого диапазона. - внутри character class образует range.Here

_ десятичный 95

. десятичный 46.

Так формируется недопустимый диапазон от 95 to 46

0
var specialCharacterSet = "^[()_.-]"; 
     var test = Regex.IsMatch("a!", specialCharacterSet); 
     Console.WriteLine(test); 
     Console.ReadLine(); 
+0

Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст в отношении _how_ и/или _why_, он решает проблему, улучшив долгосрочную ценность ответа. –

2

Вы можете использовать^[()_\-.] или ^[()_.-], если вы используете специальные символы, то лучше всего использование \ перед любыми специальными символами (которые используются в регулярных выражениях специального символа.).

Смежные вопросы