Saya memiliki string "1112224444 'itu adalah nomor telepon. Saya ingin memformat sebagai 111-222-4444 sebelum saya menyimpannya dalam sebuah file. Ini pada flatecord dan saya lebih suka untuk dapat melakukan ini tanpa menetapkan yang baru variabel.
Saya berpikir:
String.Format("{0:###-###-####}", i["MyPhone"].ToString() );
tapi itu tampaknya tidak berhasil.
** PEMBARUAN **
Baik. Saya pergi dengan solusi ini
Convert.ToInt64(i["Customer Phone"]).ToString("###-###-#### ####")
Sekarang menjadi kacau ketika ekstensi kurang dari 4 digit. Itu akan mengisi angka-angka dari kanan. begitu
1112224444 333 becomes
11-221-244 3334
Ada ide?
c#
string
formatting
phone-number
Brian G
sumber
sumber
Jawaban:
Harap dicatat, jawaban ini berfungsi dengan tipe data numerik (int, panjang). Jika Anda memulai dengan sebuah string, Anda harus mengonversinya menjadi angka terlebih dahulu. Selain itu, harap perhatikan bahwa Anda harus memvalidasi bahwa string awal paling tidak panjangnya 10 karakter.
Dari halaman yang bagus penuh dengan contoh:
Meskipun regex dapat bekerja lebih baik, ingatlah kutipan pemrograman lama:
sumber
Saya lebih suka menggunakan ekspresi reguler:
sumber
// Remove non-digit characters var phoneDigits = Regex.Replace(crewMember.CellPhone, "[^\\d]", string.Empty); // Format the digits var phone = Regex.Replace(phoneDigits, @"(\d{1,3})(\d{0,3})(\d{0,4})", " ($1) $2-$3");
Anda harus memecahnya menjadi substring. Meskipun Anda bisa melakukannya tanpa variabel tambahan, itu tidak akan terlalu bagus. Inilah salah satu solusi potensial:
sumber
if (phone.Length == 10)
kondisi.Saya menyarankan ini sebagai solusi bersih untuk nomor AS.
sumber
Sejauh yang saya tahu Anda tidak dapat melakukan ini dengan string.Format ... Anda harus menangani ini sendiri. Anda bisa menghapus semua karakter non-numerik dan kemudian melakukan sesuatu seperti:
Ini mengasumsikan data telah dimasukkan dengan benar, yang dapat Anda gunakan ekspresi reguler untuk memvalidasi.
sumber
Ini seharusnya bekerja:
ATAU dalam kasus Anda:
sumber
Jika Anda bisa mendapatkan
i["MyPhone"]
sebagailong
, Anda dapat menggunakanlong.ToString()
metode untuk memformatnya:Lihat halaman MSDN pada String Format Numerik .
Hati-hati menggunakan panjang daripada int: int bisa meluap.
sumber
2125551-212-1234.
sumber
Jika Anda mencari nomor telepon (AS) yang akan dikonversi secara real time. Saya sarankan menggunakan ekstensi ini. Metode ini berfungsi sempurna tanpa mengisi angka-angka mundur. The
String.Format
solusi tampaknya mundur pekerjaan. Cukup terapkan ekstensi ini ke string Anda.sumber
Anda juga dapat mencoba ini:
Keluaran:
sumber
Anda mungkin menemukan diri Anda dalam situasi di mana Anda memiliki pengguna yang mencoba memasukkan nomor telepon dengan segala macam pemisah antara kode area dan blok nomor utama (mis. Spasi, tanda hubung, titik, dll ...) Jadi, Anda ingin menghapus input semua karakter yang bukan angka sehingga Anda dapat mensterilkan input yang Anda kerjakan. Cara termudah untuk melakukan ini adalah dengan ekspresi RegEx.
Maka jawaban yang Anda daftarkan harusnya berfungsi dalam banyak kasus.
Untuk menjawab apa yang Anda miliki tentang masalah ekstensi, Anda dapat menghapus apa pun yang lebih panjang dari yang diharapkan dari sepuluh (untuk nomor telepon biasa) dan menambahkannya ke akhir menggunakan
Anda akan ingin melakukan pemeriksaan 'jika' untuk menentukan apakah panjang input Anda lebih besar dari 10 sebelum melakukan ini, jika tidak, gunakan saja:
sumber
sumber
sumber
Coba ini
Bersulang.
sumber
Gunakan Match in Regex untuk memecah, kemudian output string yang diformat dengan match.groups
sumber
Berikut ini akan berfungsi tanpa menggunakan ekspresi reguler
Jika kita tidak menggunakan long.Parse, string.format tidak akan berfungsi.
sumber
Output akan menjadi: 001-568-895623
sumber
Silakan gunakan tautan berikut untuk C # http://www.beansoftware.com/NET-Tutorials/format-string-phone-number.aspx
Cara termudah untuk melakukan format menggunakan Regex.
Berikan nomor telepon Anda sebagai string 2021231234 hingga 15 karakter.
Pendekatan lain adalah menggunakan Substring
sumber
Untuk mengatasi masalah ekstensi Anda, bagaimana dengan:
sumber
Bukan untuk membangkitkan kembali pertanyaan lama tapi pikir saya mungkin menawarkan setidaknya sedikit lebih mudah untuk menggunakan metode, jika sedikit lebih rumit dari suatu pengaturan.
Jadi jika kita membuat formatter kustom baru kita dapat menggunakan format sederhana
string.Format
tanpa harus mengubah nomor telepon kita menjadi along
Jadi pertama-tama mari kita buat formatter khusus:
Jadi jika Anda ingin menggunakan ini, Anda akan melakukan sesuatu ini:
Beberapa hal lain untuk dipikirkan:
Saat ini jika Anda menentukan formatter yang lebih panjang dari yang Anda lakukan string untuk memformat itu hanya akan mengabaikan tanda # tambahan. Misalnya ini
String.Format(new NumericStringFormatter(),"{0:###-###-####}", "12345");
akan menghasilkan 123-45- jadi Anda mungkin ingin memilikinya mengambil semacam karakter pengisi yang mungkin dalam konstruktor.Juga saya tidak menyediakan cara untuk keluar dari tanda # jadi jika Anda ingin memasukkannya ke dalam string keluaran Anda, Anda tidak akan bisa seperti sekarang.
Alasan saya lebih suka metode ini daripada Regex adalah saya sering memiliki persyaratan untuk memungkinkan pengguna untuk menentukan format sendiri dan itu jauh lebih mudah bagi saya untuk menjelaskan cara menggunakan format ini daripada mencoba untuk mengajarkan regex pengguna.
Juga nama kelas agak keliru karena sebenarnya berfungsi untuk memformat string apa pun selama Anda ingin menyimpannya dalam urutan yang sama dan hanya menyuntikkan karakter di dalamnya.
sumber
Anda dapat mencoba {0: (000) 000 - ####} jika nomor target Anda dimulai dengan 0.
sumber
Inilah cara lain untuk melakukannya.
sumber