Saya belum pernah menggunakan ekspresi reguler sama sekali, jadi saya mengalami kesulitan pemecahan masalah. Saya ingin regex hanya cocok ketika string yang terkandung adalah semua angka; tetapi dengan dua contoh di bawah ini cocok dengan string yang berisi semua angka plus tanda sama dengan seperti "1234 = 4321". Saya yakin ada cara untuk mengubah perilaku ini, tetapi seperti yang saya katakan, saya tidak pernah benar-benar melakukan banyak hal dengan ekspresi reguler.
string compare = "1234=4321";
Regex regex = new Regex(@"[\d]");
if (regex.IsMatch(compare))
{
//true
}
regex = new Regex("[0-9]");
if (regex.IsMatch(compare))
{
//true
}
Dalam hal ini penting, saya menggunakan C # dan .NET2.0.
Jawaban:
Gunakan jangkar awal dan akhir.
Gunakan
"^\d+$"
jika Anda harus mencocokkan lebih dari satu digit.Perhatikan bahwa
"\d"
akan cocok[0-9]
dan karakter digit lainnya seperti angka Arab Timur٠١٢٣٤٥٦٧٨٩
. Gunakan"^[0-9]+$"
untuk membatasi kecocokan hanya ke angka Arab 0 - 9.Jika Anda perlu menyertakan representasi numerik selain hanya digit (seperti nilai desimal untuk pemula), lalu lihat @tchrist 's panduan komprehensif untuk parsing nomor dengan ekspresi reguler .
sumber
"^\d{6}$"
. Beberapa negara lain memiliki aturan yang lebih rumit untuk kode pos, jadi solusi regex untuk banyak negara juga bisa menjadi sangat rumit. Lihatlah beberapa contoh di stackoverflow.com/q/578406/1288Regex Anda akan cocok dengan apa pun yang berisi angka, Anda ingin menggunakan jangkar untuk mencocokkan seluruh string dan kemudian mencocokkan satu atau lebih angka:
Surat
^
wasiat akan melabuhkan bagian awal tali, huruf$
wali akan melabuhkan ujung tali, dan+
huruf wangi akan mencocokkan satu atau lebih dari apa yang mendahuluinya (angka dalam hal ini).sumber
Jika Anda perlu mentolerir titik desimal dan seribu penanda
Anda akan memerlukan "-", jika angkanya bisa negatif.
sumber
-
) dan titik (.
) muncul lebih dari sekali.-
dan.
opsional melalui?
.-?\d+(?:\.\d+)?
akan cocok dengan bilangan bulat atau desimal. (Bagian?:
dalam parens hanya menjadikan parens sebagai grup yang tidak menangkap dan digunakan hanya grup untuk kejelasan.)^-?[0-9][0-9,\.]*$
untuk menghindari kegagalan untuk kasus dasar. + diganti dengan *Ini cocok karena menemukan "kecocokan" bukan kecocokan dari string penuh. Anda dapat memperbaikinya dengan mengubah regexp Anda untuk secara spesifik mencari bagian awal dan akhir string.
sumber
Mungkin metode saya akan membantu Anda.
sumber
Char.IsDigit
kembalitrue
untuk setiap karakter yang merupakan anggota dari kategori UnicodeCategory.DecimalDigitNumber . Ini mungkin bukan yang diinginkan OP. Lihat juga Mengapa Char.IsDigit mengembalikan true untuk karakter yang tidak dapat diuraikan ke int? .Ini bekerja dengan bilangan bulat dan angka desimal. Itu tidak cocok jika nomor memiliki pemisah koma seribu,
beberapa string yang cocok dengan ini:
beberapa string yang tidak:
sumber
^ \ d + $, yang merupakan "awal string", "1 atau lebih digit", "akhir string" dalam bahasa Inggris.
sumber
Jika Anda perlu memeriksa apakah semua digit adalah angka (0-9) atau tidak,
1425 BENAR
0142 BENAR
0 BENAR
1 BENAR
154a25 SALAH
1234 = 3254 SALAH
sumber
Ini pekerjaan saya:
Dan beberapa tes
Tes positif:
Tes negatif:
Diperiksa tidak hanya untuk C #, tetapi juga dengan Java, Javascript dan PHP
sumber
Maaf untuk pemformatan jelek. Untuk sejumlah digit:
Untuk satu digit atau lebih:
sumber
Walaupun bukan solusi di atas yang sesuai dengan tujuan saya, ini berhasil bagi saya.
Contoh nilai yang valid: "3", "-3", "0", "0,0", "1,0", "0,7", "690,7", "0,0001", "-555", "945465464654"
Contoh nilai yang tidak valid: "a", "", "", ".", "-", "001", "00.2", "000.5", ".3", "3.", "-1" , "--1", "-.1", "-0", "00099", "099"
sumber
Cara lain: Jika Anda ingin mencocokkan nomor internasional seperti Persia atau Arab, maka Anda dapat menggunakan ungkapan berikut:
Untuk mencocokkan penggunaan karakter periode literal:
sumber
gunakan jangkar awal dan akhir.
sumber
Regex untuk angka integer dan floating point:
Angka dapat dimulai dengan titik (tanpa digit depan), dan angka dapat diakhiri dengan titik (tanpa trailing digit) Regex di atas akan mengenali keduanya sebagai angka yang benar.
SEBUAH . (titik) itu sendiri tanpa angka bukanlah angka yang benar. Itu sebabnya kita membutuhkan dua bagian regex di sana (dipisahkan dengan "|").
Semoga ini membantu.
sumber
Saya pikir ini adalah yang paling sederhana dan menerima cara penulisan angka di Eropa dan Amerika Serikat, mis. USA 10,555.12 Eropa 10,555,12 Juga yang satu ini tidak memungkinkan beberapa koma atau titik satu sama lain, misalnya 10..22 atau 10, .22 Selain angka-angka ini seperti 0,55 atau, 55 akan berlalu. Ini mungkin berguna.
sumber
Jika Anda ingin mengekstrak hanya angka dari string, pola "\ d +" akan membantu.
sumber
Regex regex = Regex baru ("^ [0-9] {1,4} = [0-9] {1,4] $")
sumber