Answers:
使用以下表达式:
^[a-zA-Z0-9]*$
即:
using System.Text.RegularExpressions;
Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(SomeString)) {
...
}
在.NET 4.0中,您可以使用LINQ:
if (yourText.All(char.IsLetterOrDigit))
{
//just letters and digits.
}
yourText.All
将会停止执行并返回false
第一次char.IsLetterOrDigit
报告,false
因为那时合同All
无法履行。
注意!此答案不严格检查字母数字(通常是AZ,az和0-9)。此答案允许使用本地字符åäö
。
更新2018-01-29
上面的语法仅在使用具有正确类型的单个参数(在这种情况下char
)的单个方法时有效。
要使用多个条件,您需要这样编写:
if (yourText.All(x => char.IsLetterOrDigit(x) || char.IsWhiteSpace(x)))
{
}
char.IsLetterOrDigit('ก')
将返回true
。csharppad.com/gist/f96a6062f9f8f4e974f222ce313df8ca
您可以使用扩展功能而不是正则表达式轻松地做到这一点...
public static bool IsAlphaNum(this string str)
{
if (string.IsNullOrEmpty(str))
return false;
for (int i = 0; i < str.Length; i++)
{
if (!(char.IsLetter(str[i])) && (!(char.IsNumber(str[i]))))
return false;
}
return true;
}
每条评论:) ...
public static bool IsAlphaNum(this string str)
{
if (string.IsNullOrEmpty(str))
return false;
return (str.ToCharArray().All(c => Char.IsLetter(c) || Char.IsNumber(c)));
}
char.IsLetterOrDigit
替代IsLetter + ISNUMBER
虽然我认为基于正则表达式的解决方案可能是我要采用的方式,但我很想将其封装为一种类型。
public class AlphaNumericString
{
public AlphaNumericString(string s)
{
Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(s))
{
value = s;
}
else
{
throw new ArgumentException("Only alphanumeric characters may be used");
}
}
private string value;
static public implicit operator string(AlphaNumericString s)
{
return s.value;
}
}
现在,当您需要一个经过验证的字符串时,可以让方法签名需要一个AlphaNumericString,并且知道如果得到一个,则它是有效的(除了null)。如果有人尝试传递未经验证的字符串,则会生成编译器错误。
如果您愿意的话,您可以更轻松地实现所有相等运算符,或者从纯字符串'显式转换为AlphaNumericString。
static public implicit operator string
部分
我需要检查AZ,az,0-9;没有正则表达式(即使OP要求使用正则表达式)。
在此处混合各种答案和评论,以及来自https://stackoverflow.com/a/9975693/292060的讨论,此测试可测试字母或数字,避免使用其他语言字母以及避免使用其他数字(例如小数字符)。
if (!String.IsNullOrEmpty(testString)
&& testString.All(c => Char.IsLetterOrDigit(c) && (c < 128)))
{
// Alphanumeric.
}
为了检查字符串是否同时是字母和数字的组合,可以使用.NET 4.0和LINQ如下重写@jgauffin答案:
if(!string.IsNullOrWhiteSpace(yourText) &&
yourText.Any(char.IsLetter) && yourText.Any(char.IsDigit))
{
// do something here
}
与这里的答案相同。
如果要进行非正则表达式ASCII A-z 0-9
检查,则不能使用char.IsLetterOrDigit()
它,因为它包括其他Unicode字符。
您可以做的是检查字符代码范围。
以下内容比较冗长,但这是为了易于理解,而不是为了编写代码。
public static bool IsAsciiAlphaNumeric(this string str)
{
if (string.IsNullOrEmpty(str))
{
return false;
}
for (int i = 0; i < str.Length; i++)
{
if (str[i] < 48) // Numeric are 48 -> 57
{
return false;
}
if (str[i] > 57 && str[i] < 65) // Capitals are 65 -> 90
{
return false;
}
if (str[i] > 90 && str[i] < 97) // Lowers are 97 -> 122
{
return false;
}
if (str[i] > 122)
{
return false;
}
}
return true;
}
根据cletus的答案,您可以创建新的扩展名。
public static class StringExtensions
{
public static bool IsAlphaNumeric(this string str)
{
if (string.IsNullOrEmpty(str))
return false;
Regex r = new Regex("^[a-zA-Z0-9]*$");
return r.IsMatch(str);
}
}
我建议不要依赖.NET框架中现成的内置代码,请尝试提出新的解决方案。这是我的工作。
public bool isAlphaNumeric(string N)
{
bool YesNumeric = false;
bool YesAlpha = false;
bool BothStatus = false;
for (int i = 0; i < N.Length; i++)
{
if (char.IsLetter(N[i]) )
YesAlpha=true;
if (char.IsNumber(N[i]))
YesNumeric = true;
}
if (YesAlpha==true && YesNumeric==true)
{
BothStatus = true;
}
else
{
BothStatus = false;
}
return BothStatus;
}
char.IsNumber()
方法,因为那是预构建代码?