[英]Regex to allow some special characters c#
我必須檢查一個字符串是否包含特殊字符,但我可以在其中允許這 5 個特殊字符.()_-
我把我的正則表達式寫成
var specialCharacterSet = "^[()_-.]";
var test = Regex.Match("a!", specialCharacterSet);
var isValid = test.Success;
但它拋出一個:
錯誤解析“^[()_-.]”- [xy] 范圍以相反的順序。
您已使用-
指定了范圍。 把它放在最后:
[()_.-]
否則范圍不正確:下邊界符號_
后面出現在字符表中而不是上限符號.
:
此外,如果您計划檢查字符串中的任何字符是否屬於此集合,則應刪除僅在字符串開頭檢查的^
。
要測試字符串是否符合某種模式,請使用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演示
如果使用特殊字符,則可以使用 ^[()_\\-.]
或^[()_.-]
,然后在任何特殊字符(在正則表達式特殊字符中使用)之前最好使用\\
。
[()_.-]
保持-
結束或escape
它以避免它形成無效范圍。 -
在一個character class
形成一個范圍。這里
_
是十進制95
.
是十進制46
。
所以它形成了從95 to 46
的無效范圍
var specialCharacterSet = "^[()_.-]";
var test = Regex.IsMatch("a!", specialCharacterSet);
Console.WriteLine(test);
Console.ReadLine();
就C#而言,最好的方法是[()_ \\ - \\。],因為。 和 - 是正則表達式的保留字符。 您需要在這些保留字符之前使用轉義字符。
使用 Regex.Escape() 將模式中的所有特殊字符轉換為文本。 假設您已經using System.Text.RegularExpressions;
string pattern = Regex.Escape("[");
然后像這樣檢查
if (Regex.IsMatch("ab[c", pattern)) Console.WriteLine("found");
Microsoft 沒有在教程中講述轉義。 我是從Perl學來的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.