这应该是一个相当简单的问题,但我似乎在思考它。
我有一个输入,我需要确保没有任何不是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
编辑:我认为这是正则报告的倒退。它与' *'?
有关答案 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));