[英]C# regex does not allow special characters correctly?
例如我有以下字符串:
thats a\n\ntest\nwith multiline \n\nthings...
我嘗試使用以下代碼,該代碼無法正常工作,但仍未包含所有字符:
string text = "thats a\n\ntest\nwith multiline \n\nthings and so on";
var res = Regex.IsMatch(text, @"^([a-zA-Z0-9äöüÄÖÜß\-|()[\]/%'<>_?!=,*. ':;#+\\])+$");
Console.WriteLine(res);
我希望正則表達式在only
包含以下字符時返回 true (不必包含所有字符,但至少包含以下字符之一且不包含其他字符): az
、 AZ
、 0-9
、 äüöÄÖÜß
和.#'-:,;? ^"§$%&/()=?\}][{³²°*+~'_<>|
.#'-:,;? ^"§$%&/()=?\}][{³²°*+~'_<>|
.
這是我認為在消息中使用會很好的已知鍵盤字符列表。
如果您指定了所有要允許的字符,則 C# 中的正則表達式聲明將如下所示
@"^[a-zA-Z0-9äüöÄÖÜß!#'\-.:,; ^""§$%&/()=?\\}\][{³²°*+~'_<>|]+$"
但是,您提供的測試字符串包含換行符 (LF, \n
, \x0A
) 字符,因此您需要在沒有換行符的字符串上進行測試,或者將\n
添加到字符 class 中:
@"^[a-zA-Z0-9äüöÄÖÜß!#'\-.:,; ^""§$%&/()=?\\}\][{³²°*+~'_<>|\n]+$"
請注意, "
字符是加倍的,因為這是將雙引號放入逐字字符串文字的唯一方法。
此外,模式中的捕獲括號會產生多余的開銷,您應該刪除它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.