C# Regex.IsMatch问题

C# Regex.IsMatch问题,c#,regex,C#,Regex,这应该是一个相当简单的问题,但我似乎想得太多了 我有一个输入,我需要确保没有任何字符不是 以下是我想要的输入和输出: Input: AB2RAF@#%$@% Ouput: Valid (All are within ASCII 32-127) Input: º¿º234234 Ouput: Invalid (Has 'º' and '¿') Input: AAABCC Ouput: Valid 编辑:我想是正则表达式倒过来了。它与“*”有关?请尝试以下操作: strin

这应该是一个相当简单的问题,但我似乎想得太多了

我有一个输入,我需要确保没有任何字符不是

以下是我想要的输入和输出:

Input: AB2RAF@#%$@%  Ouput: Valid (All are within ASCII 32-127)
Input: º¿º234234     Ouput: Invalid (Has 'º' and '¿')
Input: AAABCC        Ouput: Valid

编辑:我想是正则表达式倒过来了。它与“*”有关?

请尝试以下操作:

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

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

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

请尝试以下操作:

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

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

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

我只需迭代字符串中的字符,并检查是否有超出所需范围的字符。差不多

private bool IsPrintable(string someString)
{
    foreach(var c in someString)
    {
        if((int)c < 32 || (int)c > 127)
            return false;
    }
    return true;
}
private bool可打印(字符串someString)
{
foreach(someString中的变量c)
{
如果((int)c<32 | |(int)c>127)
返回false;
}
返回true;
}

我只需迭代字符串中的字符,并检查是否有超出所需范围的字符。差不多

private bool IsPrintable(string someString)
{
    foreach(var c in someString)
    {
        if((int)c < 32 || (int)c > 127)
            return false;
    }
    return true;
}
private bool可打印(字符串someString)
{
foreach(someString中的变量c)
{
如果((int)c<32 | |(int)c>127)
返回false;
}
返回true;
}

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

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

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

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

你应该添加一个解释你改变了什么和为什么。你应该添加一个解释你改变了什么和为什么。你想一个空字符串被认为是无效的吗?你认为ASCII 127无效吗?或者代码有,但您的描述没有。您可以否定正则表达式的含义(因此,如果输入有效,它将匹配),然后使用
^[-~]*$
Empty仍然有效。好点,ASCII 127可能无效。可能要复制一个空字符串是否无效?你认为ASCII 127无效吗?或者代码有,但您的描述没有。您可以否定正则表达式的含义(因此,如果输入有效,它将匹配),然后使用
^[-~]*$
Empty仍然有效。好的一点,ASCII 127在那时是无效的。一个更简单但更慢的版本的可能副本是
!s、 Any(c=>c<32 | | c>127)
s.All(c=>c>=32&&c谢谢!这似乎很管用!我确实在if语句末尾遇到了一些代码语法问题(额外一个“)”。更简单但更慢的版本是
!s.Any(c=>c<32 | c>127)
s.All(c=>c>=32&&c谢谢!这似乎很管用!我确实在if语句末尾的代码中遇到了一些语法问题(一个额外的“')”。