回答:
次の式を使用します。
^[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の更新
上記の構文は、正しいタイプの引数が1つある(この場合はchar
)1つのメソッドを使用する場合にのみ機能します。
複数の条件を使用するには、次のように記述する必要があります。
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を除く)。検証されていない文字列を渡そうとすると、コンパイラエラーが発生します。
気になる場合は、より洗練されたすべての等価演算子を実装するか、プレーンなol '文字列から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.
}
^\w+$
できるようになります a-zA-Z0-9_
^[a-zA-Z0-9]+$
アンダースコアを禁止するために使用します。
これらの両方が空でない文字列を必要とすることに注意してください。の*
代わりに使用すると+
、空の文字列が許可されます。
^[\w-]+$
ここと同じ答え。
非正規表現の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;
}
クレタスの回答に基づいて、新しい拡張子を作成できます。
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()
、それは事前ビルドされたコードなのでメソッドを使用すべきではありませんか?