Yanıtlar:
Aşağıdaki ifadeyi kullanın:
^[a-zA-Z0-9]*$
yani:
using System.Text.RegularExpressions;
Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(SomeString)) {
...
}
.NET 4.0'da LINQ kullanabilirsiniz:
if (yourText.All(char.IsLetterOrDigit))
{
//just letters and digits.
}
yourText.All
sözleşmesi yerine getirilemeyeceği false
için ilk sefer char.IsLetterOrDigit
raporlarını yürütmeyi durduracak ve geri gönderecektir .false
All
Not! bu cevap alfasayısalları (tipik olarak AZ, az ve 0-9) kesin olarak kontrol etmez. Bu cevap gibi yerel karakterlere izin verir åäö
.
Güncelleme 2018-01-29
Yukarıdaki sözdizimi yalnızca doğru türde tek bir bağımsız değişkene sahip tek bir yöntem kullandığınızda çalışır (bu durumda char
).
Birden çok koşul kullanmak için şu şekilde yazmanız gerekir:
if (yourText.All(x => char.IsLetterOrDigit(x) || char.IsWhiteSpace(x)))
{
}
char.IsLetterOrDigit('ก')
geri dönecek true
. csharppad.com/gist/f96a6062f9f8f4e974f222ce313df8ca
Bunu bir regex yerine bir uzantı işlevi ile kolayca yapabilirsiniz ...
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;
}
Yorum başına :) ...
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
onun yerine IsLetter + IsNumber kullanın
Normal ifadeye dayalı çözümün muhtemelen benim gideceğim yol olduğunu düşünsem de, bunu bir tür içinde özetlemek isterim.
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;
}
}
Şimdi, doğrulanmış bir dizeye ihtiyacınız olduğunda, yöntem imzasının bir AlphaNumericString gerektirmesini sağlayabilirsiniz ve bir tane alırsanız, bunun geçerli olduğunu bilirsiniz (boşlar dışında). Birisi doğrulanmamış bir dizge geçmeye çalışırsa, bir derleyici hatası oluşturur.
Daha meraklı olabilir ve tüm eşitlik işleçlerini uygulayabilir veya eğer umursuyorsanız, düz ol 'dizesinden AlphaNumericString'e açık bir dönüştürme yapabilirsiniz.
static public implicit operator string
parçasını
AZ, az, 0-9'u kontrol etmem gerekiyordu; normal ifade olmadan (OP normal ifadeyi istemesine rağmen).
Burada çeşitli yanıtları ve yorumları harmanlayarak ve https://stackoverflow.com/a/9975693/292060 adresinden tartışarak , bu, harf veya rakamları test eder, diğer dil harflerinden kaçınır ve kesir karakterleri gibi diğer sayılardan kaçınır.
if (!String.IsNullOrEmpty(testString)
&& testString.All(c => Char.IsLetterOrDigit(c) && (c < 128)))
{
// Alphanumeric.
}
^\w+$
sağlayacaktır a-zA-Z0-9_
^[a-zA-Z0-9]+$
Alt çizgiye izin vermemek için kullanın .
Bunların her ikisinin de dizenin boş olmamasını gerektirdiğini unutmayın. Kullanma *
yerine +
boş dizeleri tanır.
^[\w-]+$
Dizenin hem harflerin hem de rakamların birleşimi olup olmadığını kontrol etmek için, @jgauffin yanıtını .NET 4.0 ve LINQ kullanarak aşağıdaki gibi yeniden yazabilirsiniz:
if(!string.IsNullOrWhiteSpace(yourText) &&
yourText.Any(char.IsLetter) && yourText.Any(char.IsDigit))
{
// do something here
}
Buradaki ile aynı cevap .
Normal olmayan bir ASCII A-z 0-9
kontrolü istiyorsanız char.IsLetterOrDigit()
, diğer Unicode karakterlerini içerdiğini kullanamazsınız .
Yapabileceğiniz şey, karakter kodu aralıklarını kontrol etmektir.
Aşağıdakiler biraz daha ayrıntılıdır, ancak kod golfünden çok anlama kolaylığı içindir.
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'un cevabına göre yeni uzantı oluşturabilirsiniz.
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 çerçevesinde hazır ve yerleşik koda güvenmemenizi, yeni bir çözüm getirmeyi denemenizi öneririm .. Yaptığım şey bu ..
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()
yöntemi önceden oluşturulmuş kod olduğu için kullanmamalısınız ?