我如何validationstring只允许字母数字字符?
我如何使用正则expression式来validationstring只允许字母数字字符?
(我不想让任何空间)。
使用expression式:
^[a-zA-Z0-9]*$
即:使用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)。 这个答案允许像åäö
这样的本地字符。
你可以用扩展函数而不是正则expression式轻松地完成
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))); }
虽然我认为基于正则expression式的解决scheme可能是我想要的方式,但是我很想将其封装在一个types中。
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; } }
现在,当你需要一个经validation的string时,你可以让方法签名需要一个AlphaNumericString,并知道如果你得到一个,它是有效的(除了空值)。 如果有人试图传递一个未经validation的string,将会产生一个编译器错误。
如果你在意的话,你可以更好的实现所有的相等运算符,或者从普通的string中明确地转换成AlphaNumericString。
我需要检查AZ,az,0-9; 没有正则expression式(即使OP要求正则expression式)。
在这里混合各种答案和评论,并从https://stackoverflow.com/a/9975693/292060讨论,这个testing的字母或数字,避免其他语言字母,并避免其他数字,如分数字符。;
if (!String.IsNullOrEmpty(testString) && testString.All(c => Char.IsLetterOrDigit(c) && (c < 128))) { // Alphanumeric. }
^\w+$
将允许a-zA-Z0-9_
使用^[a-zA-Z0-9]+$
来禁止下划线。
请注意,这两个都要求string不能为空。 使用*
而不是+
允许空string。
为了检查string是否是字母和数字的组合,可以使用.NET 4.0和LINQ按如下方式重新编写@jgauffin答案:
if(!string.IsNullOrWhiteSpace(yourText) && (!yourText.Any(char.IsLetter) || !yourText.Any(char.IsDigit))) { // do something here }
我build议不要依赖.NET框架中的现成代码和代码,试图提出新的解决scheme。这就是我所做的。
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; }