文字列に数字のみが含まれているかどうかを確認する必要があります。C#でこれを達成するにはどうすればよいですか?
string s = "123" → valid
string s = "123.67" → valid
string s = "123F" → invalid
IsNumeric のような関数はありますか?
これは、文字列の長さに関係なく機能するはずです。
string s = "12345";
bool iAllNumbers = s.ToCharArray ().All (ch => Char.IsDigit (ch) || ch == '.');
正規表現を使用するのが最も簡単な方法です (ただし、最速ではありません)。
bool isNumeric = Regex.IsMatch(s,@"^(\+|-)?\d+(\.\d+)?$");
上記のように、 double.tryParse を使用できます
(何らかの理由で) それが気に入らない場合は、独自の拡張メソッドを作成できます。
public static class ExtensionMethods
{
public static bool isNumeric (this string str)
{
for (int i = 0; i < str.Length; i++ )
{
if ((str[i] == '.') || (str[i] == ',')) continue; //Decide what is valid, decimal point or decimal coma
if ((str[i] < '0') || (str[i] > '9')) return false;
}
return true;
}
}
使用法:
string mystring = "123456abcd123";
if (mystring.isNumeric()) MessageBox.Show("The input string is a number.");
else MessageBox.Show("The input string is not a number.");
入力:
123456abcd123
123.6
出力:
間違い
真実
文字列をパラメーターとして受け取っている場合、より柔軟な方法は、他の投稿で説明されているように正規表現を使用することです。ユーザーからの入力を取得する場合は、KeyDown イベントをフックして、数字以外のすべてのキーを無視することができます。このようにして、数字だけを持っていることを確認できます。