如何使用正则表达式验证字符串,只允许其中包含字母数字字符?
(我不想允许任何空格。)
答案 0 :(得分:187)
在.NET 4.0中,您可以使用LINQ:
if (yourText.All(char.IsLetterOrDigit))
{
//just letters and digits.
}
yourText.All
将停止执行并在第一次false
报告char.IsLetterOrDigit
时返回false
,因为All
的合同无法完成。
注意!这个答案并没有严格检查字母数字(通常是A-Z,a-z和0-9)。此答案允许使用åäö
等本地字符。
更新2018-01-29
上述语法仅在使用具有正确类型的单个参数的单个方法时才有效(在本例中为char
)。
要使用多个条件,您需要这样写:
if (yourText.All(x => char.IsLetterOrDigit(x) || char.IsWhiteSpace(x)))
{
}
答案 1 :(得分:164)
使用以下表达式:
^[a-zA-Z0-9]*$
即:
using System.Text.RegularExpressions;
Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(SomeString)) {
...
}
答案 2 :(得分:33)
您可以使用扩展功能而不是正则表达式轻松完成...
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)));
}
答案 3 :(得分:17)
虽然我认为基于正则表达式的解决方案可能就像我要去的那样,但我很想将其封装在一个类型中。
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,并且知道如果你得到一个,它就是有效的(除了空值)。如果有人试图传入未经验证的字符串,则会产生编译错误。
如果你愿意的话,你可以更好地实现所有相等运算符,或者从普通ol'字符串显式转换为AlphaNumericString。
答案 4 :(得分:8)
我需要检查A-Z,a-z,0-9;没有正则表达式(即使OP要求正则表达式)。
在此处混合各种答案和评论,以及https://stackoverflow.com/a/9975693/292060的讨论,此字母或数字测试,避免使用其他语言字母,以及避免其他数字,例如分数字符。
if (!String.IsNullOrEmpty(testString)
&& testString.All(c => Char.IsLetterOrDigit(c) && (c < 128)))
{
// Alphanumeric.
}
答案 5 :(得分:3)
^\w+$
将允许a-zA-Z0-9_
使用^[a-zA-Z0-9]+$
禁止使用下划线。
请注意,这两个都要求字符串不为空。使用*
代替+
可以使用空字符串。
答案 6 :(得分:2)
为了检查字符串是否是字母和数字的组合,您可以使用.NET 4.0和LINQ重写@jgauffin,如下所示:
if(!string.IsNullOrWhiteSpace(yourText) &&
yourText.Any(char.IsLetter) && yourText.Any(char.IsDigit))
{
// do something here
}
答案 7 :(得分:1)
答案与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;
}
答案 8 :(得分:0)
根据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);
}
}
答案 9 :(得分:0)
虽然有很多方法可以给这只猫剥皮,但我更喜欢将这些代码包装到可重用的扩展方法中,这样以后的工作就变得微不足道了。使用扩展方法时,您还可以避免使用 RegEx,因为它比直接字符检查慢。我喜欢使用 Extensions.cs NuGet 包中的扩展。它使这项检查变得如此简单:
using Extensions;
”。"smith23".IsAlphaNumeric()
将返回 True 而 "smith 23".IsAlphaNumeric(false)
将返回 False。默认情况下,.IsAlphaNumeric()
方法会忽略空格,但它也可以被覆盖,如上所示。如果你想允许空格,这样 "smith 23".IsAlphaNumeric()
将返回 True,简单的默认参数。MyString.IsAlphaNumeric()
。答案 10 :(得分:-7)
我建议不要依赖.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;
}