我想查一些字符串无效字符。 随着无效字符我的意思是字符不应该存在。 这些是什么角色? 这是不同的,但我觉得那不是说importan,重要的是,我应该怎么做的,什么是做到这一点的最简单,最好的方式(性能)?
让说,我只想字符串包含“A-Z”,“空”,“”,‘$’,‘0-9’
所以,如果我有一个像“HELLO计算器 ” =>无效的,因为“A”的字符串。 好了现在该怎么办呢? 我可以做一个List<char>
,并把它的每个字符是不允许的,请与此列表中的字符串。 也许不是一个好主意,因为有很多字符的呢。 但我可以做一个包含所有允许的字符的右侧列表? 接着? 对于字符串中的每个字符我比较List<char>
? 这方面的任何智能代码? 而另一个问题:如果我想补充AZ到List<char>
我必须手动添加25个字符,但这些字符是因为我知道在ASCII表65-90,我可以添加他们更容易? 有什么建议么? 谢谢
您可以使用此正则表达式:
Regex r = new Regex("[^A-Z0-9.$ ]$");
if (r.IsMatch(SomeString)) {
// validation failed
}
要创建一组字符AZ
或0-9
你可以使用一个简单的循环:
for (char c = 'A'; c <= 'Z'; c++) {
// c or c.ToString() depending on what you need
}
但你并不需要一个与正则表达式-几乎每一个正则表达式引擎理解的范围语法( AZ
)。
我才刚刚写了这样的功能,以及扩展的版本需要时限制第一和最后一个字符。 原有的功能仅仅是检查串是否包含有效字符,扩展功能增加了有效字符的数字两个整数在列表的开头检查第一个和最后一个字符时跳过,但实际上它只是简单地调用原有的功能的3倍,在下面的例子中这将确保在字符串开头字母,并且不以下划线结束。
StrChr(String, "_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"));
StrChrEx(String, "_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", 11, 1));
BOOL __cdecl StrChr(CHAR* str, CHAR* chars)
{
for (int s = 0; str[s] != 0; s++)
{
int c = 0;
while (true)
{
if (chars[c] == 0)
{
return false;
}
else if (str[s] == chars[c])
{
break;
}
else
{
c++;
}
}
}
return true;
}
BOOL __cdecl StrChrEx(CHAR* str, CHAR* chars, UINT excl_first, UINT excl_last)
{
char first[2] = {str[0], 0};
char last[2] = {str[strlen(str) - 1], 0};
if (!StrChr(str, chars))
{
return false;
}
if (excl_first != 0)
{
if (!StrChr(first, chars + excl_first))
{
return false;
}
}
if (excl_last != 0)
{
if (!StrChr(last, chars + excl_last))
{
return false;
}
}
return true;
}