Apa cara paling efisien untuk menguji string input apakah itu berisi nilai numerik (atau sebaliknya Bukan Angka)? Saya kira saya dapat menggunakan Double.Parse
atau regex (lihat di bawah) tetapi saya bertanya-tanya apakah ada beberapa cara yang dibangun untuk melakukan ini, seperti javascript NaN()
atau IsNumeric()
(apakah itu VB, saya tidak ingat?).
public static bool IsNumeric(this string value)
{
return Regex.IsMatch(value, "^\\d+$");
}
Jawaban:
Ini tidak memiliki overhead regex
Kebetulan, semua tipe data standar, dengan pengecualian mencolok dari GUID, mendukung TryParse.
update
secretwep menunjukkan bahwa nilai "2345" akan lulus tes di atas sebagai angka. Namun, jika Anda perlu memastikan bahwa semua karakter dalam string adalah digit, maka pendekatan lain harus dilakukan.
contoh 1 :
atau jika Anda ingin sedikit lebih mewah
update 2 (dari @stackonfire untuk menangani null atau string kosong)
sumber
Number
objek di Javascript adalah float atau integer, jadi ubah ke double.TryParse akan menjadi lebih tepat setaradouble
, tetapi banyak yang akan menganggapnya bukan numerik.public Boolean IsNumber(String s) { Boolean value = true; if (s == String.Empty || s == null) { value=false; } else { foreach(Char c in s.ToCharArray()) { value = value && Char.IsDigit(c); } } return value; }
Saya lebih suka sesuatu seperti ini, ini memungkinkan Anda memutuskan apa yang
NumberStyle
akan diuji.sumber
Selain jawaban benar sebelumnya, mungkin ada baiknya menunjukkan bahwa "Bukan Angka" (NaN) dalam penggunaan umumnya tidak setara dengan string yang tidak dapat dievaluasi sebagai nilai numerik. NaN biasanya dipahami sebagai nilai numerik yang digunakan untuk mewakili hasil kalkulasi "tidak mungkin" - di mana hasilnya tidak ditentukan. Dalam hal ini saya akan mengatakan penggunaan Javascript sedikit menyesatkan. Dalam C # NaN didefinisikan sebagai properti dari tipe numerik tunggal dan ganda dan digunakan untuk merujuk secara eksplisit ke hasil penyelaman nol dengan nol. Bahasa lain menggunakannya untuk mewakili nilai "tidak mungkin" yang berbeda.
sumber
Saya tahu ini telah dijawab dengan berbagai cara, dengan ekstensi dan contoh lambda, tetapi kombinasi keduanya untuk solusi paling sederhana.
atau jika Anda menggunakan Visual Studio 2015 (C # 6.0 atau lebih tinggi) kemudian
Mengagumkan C # 6 dalam satu baris. Tentu saja ini dibatasi karena hanya menguji karakter numerik saja.
Untuk menggunakan, cukup gunakan string dan panggil metode di atasnya, seperti:
sumber
Ya, IsNumeric adalah VB. Biasanya orang menggunakan metode TryParse (), meskipun agak kikuk. Seperti yang Anda sarankan, Anda selalu bisa menulis sendiri.
sumber
Saya suka metode ekstensi, tapi tidak suka melempar pengecualian jika memungkinkan. Saya memilih metode ekstensi yang mengambil 2 jawaban terbaik di sini.
sumber
Anda masih dapat menggunakan fungsi Visual Basic di C #. Satu-satunya hal yang harus Anda lakukan hanyalah mengikuti instruksi saya yang ditunjukkan di bawah ini:
Kemudian impor di kelas Anda seperti yang ditunjukkan di bawah ini:
menggunakan Microsoft.VisualBasic;
Selanjutnya gunakan dimanapun Anda inginkan seperti yang ditunjukkan di bawah ini:
Semoga membantu dan semoga berhasil!
sumber
VB memiliki
IsNumeric
fungsi. Anda dapat merujukMicrosoft.VisualBasic.dll
dan menggunakannya.sumber
Ekstensi sederhana:
sumber
sumber
Mungkin ini adalah fitur C # 3, tetapi Anda dapat menggunakannya
double.NaN
.sumber
Sebenarnya,
Double.NaN
didukung di semua .NET versi 2.0 dan yang lebih baru.sumber
Saya menggunakan potongan Chris Lively (jawaban yang dipilih) yang dikemas dalam fungsi bool seperti saran Gishu selama satu atau dua tahun. Saya menggunakannya untuk memastikan string kueri tertentu hanya numerik sebelum melanjutkan dengan pemrosesan lebih lanjut. Saya mulai mendapatkan beberapa string kueri yang salah yang tidak ditangani oleh jawaban yang ditandai, khususnya, setiap kali koma diberikan setelah angka seperti "3645", (dikembalikan benar). Ini adalah mod yang dihasilkan:
sumber
Double.TryParse(s, NumberStyles.Float, CultureInfo.InvariantCulture, out myNum)
Saya memiliki versi yang sedikit berbeda yang mengembalikan nomor tersebut. Saya akan menebak bahwa dalam banyak kasus setelah menguji string Anda ingin menggunakan nomor tersebut.
sumber
Ini adalah versi modifikasi dari solusi yang diusulkan oleh Bapak Siir. Saya menemukan bahwa menambahkan metode ekstensi adalah solusi terbaik untuk digunakan kembali dan kesederhanaan dalam metode panggilan.
Saya memodifikasi tubuh metode agar sesuai pada 2 baris dan menghapus implementasi .ToString () yang tidak perlu. Bagi mereka yang tidak terbiasa dengan metode ekstensi, berikut adalah cara mengimplementasikannya:
Buat file kelas bernama ExtensionMethods . Tempel kode ini:
Ganti YourNameSpaceHere dengan NameSpace Anda yang sebenarnya. Simpan perubahan. Sekarang Anda dapat menggunakan metode ekstensi di mana saja di aplikasi Anda:
Catatan: metode ini akan mengembalikan nilai true untuk bilangan bulat dan desimal, tetapi akan mengembalikan nilai salah jika string berisi koma. Jika Anda ingin menerima masukan dengan koma atau simbol seperti "$", saya sarankan menerapkan metode untuk menghapus karakter tersebut terlebih dahulu kemudian menguji apakah IsNumeric.
sumber