簡體   English   中英

正則表達式允許一些特殊字符 c#

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM