Regex.IsMatch问题

时间:2017-01-10 15:01:36

标签: c# regex

这应该是一个相当简单的问题,但我似乎在思考它。

我有一个输入,我需要确保没有任何不是ASCII printable characters (character code 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

编辑:我认为这是正则报告的倒退。它与' *'?

有关

3 个答案:

答案 0 :(得分:4)

我只是迭代你的字符串中的字符并检查是否有超出你想要的范围。像

这样的东西
private bool IsPrintable(string someString)
{
    foreach(var c in someString)
    {
        if((int)c < 32 || (int)c > 127)
            return false;
    }
    return true;
}

答案 1 :(得分:1)

请尝试以下方法:

string someString = "6244ABº¿º";
var regexPattern = new Regex("^$|[^ -~]");

if (regexPattern.IsMatch(someString))
{
   //invalid format
}

我添加^来否定字符范围-~,因此该范围之外的任何字符都将与表达式匹配。我也删除了*,因为它没有必要(只有一个不可打印的字符足以使字符串无效)。

答案 2 :(得分:0)

如果您只想要32到127的范围,Mats391是您问题的直接答案。但是,如果您只想确保不存在控制字符(例如,如果您想要包含Unicode字符)那么这可能就是你要找的东西。

string someString = "6244ABº¿º";
bool isValid = someString.All(i => !Char.IsControl(i));
相关问题