Вы указали диапазон с -
. Поместите его в конце:
[()_.-]
В противном случае диапазон не является правильным: нижний символ граница _
появляется позже в таблице символов, чем верхняя граница символа .
:
Кроме того, если вы планируете проверить, соответствует ли значение символа внутри строки, вы должны удалить ^
, который проверяет только в начале строки.
Чтобы проверить, если строка соответствует некоторый рисунок, использовать 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));
См IDEONE demo
Таким образом, мое регулярное выражение должно быть var specialCharacterSet = "^ [A-Za-z0-9() _.-] + $"; чтобы разрешить буквенное число и те 5 специальных символов, которые я упомянул –
Если вы планируете сопоставлять любые буквы и цифры Юникода, я предлагаю использовать '\ w', поскольку он соответствует' [\ p {L} \ p {N} _] ': '^ [\ ш() .-] + $ '. Класс категорий '\ p {N}' short Unicode соответствует всем типам цифр, '\ p {L}' соответствует любому типу букв. –
regex должен принять любое строковое значение, которое не содержит пять символов, о которых я упоминаю. Я думаю, что указанное выше выражение, которое я прокомментировал, будет делать. пожалуйста, дайте мне знать, если это не будет –