簡體   English   中英

正則表達式IsMatch問題

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

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