Bagaimana kita bisa memeriksa apakah sebuah string terdiri dari angka saja. Saya mengambil substring dari string dan ingin memeriksa apakah itu substring numerik atau bukan.
NSString *newString = [myString substringWithRange:NSMakeRange(2,3)];
iphone
objective-c
cocoa-touch
ios
nsstring
Abhinav
sumber
sumber
.
karakter[[NSCharacterSet characterSetWithCharactersInString:@"0123456789."] invertedSet]]
invertedSet
mengembalikan kelas yang membungkus set yang dibuatnya bentuk, dan mengembalikan nilai yang berlawanan untuk semua kueri. Tapi saya tidak tahu pasti.Saya sarankan menggunakan
numberFromString:
metode dari kelas NSNumberFormatter , seolah-olah nomor tersebut tidak valid, itu akan mengembalikan nil; jika tidak, ini akan mengembalikan Anda NSNumber.sumber
NO
untuk string Anda. Juga perlu diketahui: mereka juga mengembalikanYES
angka yang diisi dengan spasi. Btw, saya baru saja menambahkan beberapa cuplikan kode aktual ke jawaban Anda, harap Anda tidak keberatan.Validasi dengan ekspresi reguler, berdasarkan pola
"^[0-9]+$"
, dengan metode berikut-validateString:withPattern:
."^[0-9]+(.{1}[0-9]+)?$"
"."
."^[0-9]{4}$"
."."
, dan panjangnya antara 2 ~ 5."^[0-9]{2,5}$"
."^-?\d+$"
Ekspresi reguler dapat diperiksa di situs web online .
Fungsi helper adalah sebagai berikut.
Versi Swift 3:
Uji di taman bermain.
sumber
func numberOnly(string: String) -> Int { let expression = "" let regex = NSRegularExpression.init(pattern: expression, options: .caseInsensitive) let numberOfMatches = regex.numberOfMatches(in: string, options: .reportProgress, range: NSRange.init(location: 0, length: string.characters.count)) if numberOfMatches == 0 { return Int(string)! } return 0 }
Dan saya mendapat kesalahanPlayground execution aborted: error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).
return matchRange.location != NSNotFound;
^-?\d+$
, saya memverifikasinya di situs: regex101.comAnda dapat membuat NSScanner dan cukup memindai string:
Lihat dokumentasi NSScanner untuk metode lainnya yang dapat dipilih.
sumber
isAtEnd
.Saya pikir cara termudah untuk memeriksa bahwa setiap karakter dalam string yang diberikan adalah numerik mungkin:
Gunakan salah satu metode pabrik NSCharacterSet lainnya jika Anda ingin kontrol penuh atas karakter yang dapat diterima.
sumber
Pertanyaan asli ini tentang Objective-C, tetapi juga diposting bertahun-tahun sebelum Swift diumumkan. Jadi, jika Anda datang ke sini dari Google dan mencari solusi yang menggunakan Swift, ini dia:
sumber
Solusi Swift 3 jika perlu memverifikasi bahwa string hanya memiliki angka:
sumber
.inverted
tindakan yang tidak perlu dan lainnya.agar jelas, ini berfungsi untuk integer dalam string.
berikut adalah kategori penolong kecil berdasarkan jawaban John di atas:
dalam file .h
dalam file .m
pemakaian:
sumber
Solusi Swift 3 bisa seperti:
sumber
Jawaban John Calsbeek hampir benar tetapi menghilangkan beberapa kasus tepi Unicode.
Menurut dokumentasi untuk
decimalDigitCharacterSet
, set itu mencakup semua karakter yang dikategorikan oleh Unicode sebagaiNd
. Dengan demikian jawaban mereka akan diterima, antara lain:१
(U + 0967 DEVANAGARI DIGIT SATU)᠑
(U + 1811 MONGOLIAN DIGIT SATU)𝟙
(U + 1D7D9 MATEMATIKA DOUBLE-STRUCK DIGIT SATU)Meskipun dalam beberapa hal ini benar - setiap karakter di
Nd
memang dipetakan ke digit desimal - hampir pasti tidak seperti yang diharapkan penanya. Pada tulisan ini ada 610 poin kode yang dikategorikan sebagaiNd
, hanya sepuluh di antaranya adalah karakter yang diharapkan0
(U + 0030) hingga9
(U + 0039).Untuk memperbaiki masalah, cukup tentukan dengan tepat karakter yang dapat diterima:
sumber
Namun opsi lain:
Contoh penggunaan:
sumber
Perpanjangan @ John Calsbeek 'jawaban s, dan klarifikasi @ Jeff dan sirkus @gyratory ' s komentar.
Berikut ini dapat ditambahkan sebagai metode kategori untuk
NSString
sumber
Menguji apakah sebuah string adalah angka Mungkin Bermanfaat
sumber
Ekstensi Swift:
sumber
Untuk Swift 3
sumber
Jika Anda memiliki digit yang berasal dari bahasa campuran , yang menggunakan (atau tidak) format 0-9 digit, Anda perlu menjalankan regex yang akan mencari angka apa pun, selanjutnya adalah mengubah semua digit menjadi 0- 9 format (jika Anda membutuhkan nilai sebenarnya):
sumber
Cara termudah dan paling andal adalah mencoba menggunakan
Double
, jika hasilnyanil
- tidak dapat dibentuk menjadi angka yang sah.Info lebih lanjut di dokumentasi: https://developer.apple.com/documentation/swift/double/2926277-init
sumber
Sederhana aja ekstensi stringnya:
sumber