簡體   English   中英

確保字符串只包含C#中的某些字符

[英]Make sure string only contains certain characters in C#

我有一個字符串,我想確保它只包含BSEO|0123456789中的字符。 我試着用這個正則表達式做到這一點

Regex r = new Regex("^[BSEO|0123456789]");
if (r.IsMatch(str)) throw new Exception("Invalid character.");

但它的行為不正確(例如字符串SE拋出異常)。 我做錯了什么,我該如何修復它,是否有比使用正則表達式更好的解決方案?

你可以使用linq:

 if (str.Distinct().Except("BSEO|0123456789").Any()) throw new Exception("Invalid character."); 

編輯

在思考了一段時間之后,我認為對Distinct()的調用可能是對微優化的失敗嘗試。 如果表現很重要,請嘗試使用和不使用。 沒有它可能會表現更好。

編輯2

我現在確信Distinct()使查詢運行得更慢。 請改用:

if (str.Except("BSEO|0123456789").Any())
    throw new Exception("Invalid character."); 

現在,您正在匹配一個字符串,該字符串可以從其中一個字符開始,但之后可以包含任何其他字符。 當你確實有匹配時我也會拋出一個異常,我想這與你想做的相反。 嘗試這個:

Regex r = new Regex("^[BSEO|0123456789]+$");
if (!r.IsMatch(str)) throw new Exception("Invalid character.");

^匹配字符串的開頭。 +表示[]中的任何字符應至少出現一次。 $匹配字符串的結尾。 所以它說:字符串的開頭后面應該跟一個包含[]內部一個或多個字符的序列,后面跟着字符串的結尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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