[英]Regex.IsMatch Issues
這應該是一個非常簡單的問題,但我似乎對此考慮得過大。
我需要確保沒有不屬於ASCII可打印字符的任何輸入(字符代碼32-127) 。
string someString = "6244ABº¿º";
var regexPattern = new Regex("^$|[ -~]*");
if (regexPattern.IsMatch(someString))
{
//invalid format
}
這是我想要作為輸入和輸出的想法:
Input: AB2RAF@#%$@% Ouput: Valid (All are within ASCII 32-127)
Input: º¿º234234 Ouput: Invalid (Has 'º' and '¿')
Input: AAABCC Ouput: Valid
編輯:我認為是正則表達式倒退。 與“ *”有關嗎?
我只需要迭代字符串的字符,然后檢查是否有超出所需范圍的字符。 就像是
private bool IsPrintable(string someString)
{
foreach(var c in someString)
{
if((int)c < 32 || (int)c > 127)
return false;
}
return true;
}
請嘗試以下操作:
string someString = "6244ABº¿º";
var regexPattern = new Regex("^$|[^ -~]");
if (regexPattern.IsMatch(someString))
{
//invalid format
}
我添加了^
以否定字符范圍-~
,因此該范圍之外的任何字符都將與表達式匹配。 我還刪除了*
因為它不是必需的(只需一個不可打印的字符就足以使字符串無效)。
如果您只想要32到127的范圍,則Mats391是您問題的直接答案。但是,如果您只想確保不存在任何控制字符(例如,如果要包括Unicode字符),則此可能就是您要尋找的。
string someString = "6244ABº¿º";
bool isValid = someString.All(i => !Char.IsControl(i));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.