সি # তে টেলিফোন নম্বর হিসাবে স্ট্রিংটি কীভাবে ফর্ম্যাট করবেন


163

আমার কাছে একটি স্ট্রিং রয়েছে "1112224444" এটি একটি টেলিফোন নম্বর I আমি এটি কোনও ফাইলে সংরক্ষণের আগে 111-222-4444 হিসাবে ফর্ম্যাট করতে চাই It এটি একটি ডেটারেকার্ডে রয়েছে এবং আমি নতুনকে বরাদ্দ না করেই এটি করতে সক্ষম হতে চাই পরিবর্তনশীল।

আমি ভাবছিলাম:

String.Format("{0:###-###-####}", i["MyPhone"].ToString() );

কিন্তু এটি কৌশলটি মনে হচ্ছে না।

** হালনাগাদ **

ঠিক আছে. আমি এই সমাধান দিয়েছিলাম

Convert.ToInt64(i["Customer Phone"]).ToString("###-###-#### ####")

এক্সটেনশানটি 4 টিরও কম সংখ্যক হলে এখন এটি গণ্ডগোল করে। এটি ডান থেকে সংখ্যা পূরণ করবে। সুতরাং

1112224444 333  becomes

11-221-244 3334

কোন ধারনা?


5
দয়া করে সচেতন হন যে সব জায়গাতেই 10-সংখ্যার ফোন নম্বর নেই বা 111-222-4444 ফর্ম্যাটটি ব্যবহার করে।
ডোর হাই আর্চ

এটি 0
ড্যানো

এটি উত্তর আমেরিকান সংখ্যা কিনা তা নির্দিষ্ট করা উচিত।
আর্মস্ট্রোনজেস্ট

সতর্কতা: পুরো থ্রেড মার্কিন উত্তর আমেরিকার ফোন নম্বর ধরে ass আন্তর্জাতিক সংখ্যা সমর্থন করে এমন একটি গ্রন্থাগার ব্যবহার করুন। nuget.org/packages/libphonenumber-scharp
সান অ্যান্ডারসন

উত্তর:


204

দয়া করে মনে রাখবেন, এই উত্তরটি সংখ্যার ডেটা ধরণের (ইনট, লম্বা) সাথে কাজ করে। আপনি যদি একটি স্ট্রিং দিয়ে শুরু করছেন, আপনাকে প্রথমে এটি একটি সংখ্যায় রূপান্তর করতে হবে। এছাড়াও, দয়া করে অ্যাকাউন্টটি গ্রহণ করুন যে আপনার প্রাথমিক স্ট্রিংটির দৈর্ঘ্য কমপক্ষে 10 অক্ষর হতে হবে তা যাচাই করতে হবে।

উদাহরণগুলি পূর্ণ একটি ভাল পৃষ্ঠা থেকে :

String.Format("{0:(###) ###-####}", 8005551212);

    This will output "(800) 555-1212".

যদিও একটি রেজেক্স আরও ভাল কাজ করতে পারে, পুরানো প্রোগ্রামিংয়ের উক্তিটি মনে রাখবেন:

কিছু লোক, যখন কোনও সমস্যার মুখোমুখি হয়, তখন "আমি জানি, আমি নিয়মিত অভিব্যক্তি ব্যবহার করব"। এখন তারা দুটি সমস্যা আছে।
- জ্যামি জাওনস্কি, কম.লং.ইম্যাক্সে


কি হবে, যদি বলুন যে ফোন নম্বরটিতে কয়েকটি অঙ্ক নেই - কেবল "800555"? সেখানে উপস্থিত রয়েছে এমন কি কেবল প্রদর্শিত করার উপায় আছে?
ভুডোচিল্ড

11
এটি একটি খারাপ বাস্তবায়ন কারণ যদি ক্ষেত্রের কোডটি 0105555555 বা এরকম কিছু দিয়ে শুরু হয় তবে আপনি (010) 555-5555 এর পরিবর্তে (01) 555-5555 ফিরে আসবেন। কারণটি হ'ল আপনি যদি ফোন নম্বরটি কোনও সংখ্যায় রূপান্তর করেন তবে সামনের শূন্যটি কোনও কিছুই না হিসাবে দেখা যায় এবং আপনি যখন এটি ফর্ম্যাট করেন তখন প্রথম 0 বাদ যায়।
পল মেন্দোজা

3
@ পল দয়া করে সমস্যার সংজ্ঞাটি পড়ুন: "আমার একটি স্ট্রিং রয়েছে" 1112224444 'এটি একটি টেলিফোন নম্বর। আমি আগে আমি একটি ফাইল এ সঞ্চয় 111-222-4444 হিসাবে সম্পাদন করতে চান "।
শন

39
আপনার ফোন নম্বরটি যদি স্ট্রিং হয় তবে এটি কাজ করবে না, প্রশ্নগুলি যেমন বলেছে যে আপনি প্রথমে এটি একটি সংখ্যাসূচক মানতে রূপান্তর না করে unless
জাস্টিনস্টল

4
আমি জানি এটি কেবল উপরের মন্তব্যের পুনরাবৃত্তি করছে, কিন্তু এই উত্তরটি প্রশ্নের উত্তর দেয়নি। আপনি কীভাবে কোনও স্ট্রিংকে একটি নির্দিষ্ট বিন্যাসে ফর্ম্যাট করবেন, এই ক্ষেত্রে টেলিফোন নম্বর ফর্ম্যাট।
ডিসলেক্সিকানাবোকো

168

আমি নিয়মিত এক্সপ্রেশন ব্যবহার করতে পছন্দ করি:

Regex.Replace("1112224444", @"(\d{3})(\d{3})(\d{4})", "$1-$2-$3");

4
আমি মনে করি এটি কার্যকর হবে তবে .ToString () ফর্ম্যাটটি পড়া সহজ এবং আরও ভাল সম্পাদন করা উচিত।
জোয়েল কোহর্ন 18

14
যদি আমি ইতিমধ্যে কোনও স্ট্রিং নিয়ে কাজ করছি, যেমন পোস্টারটি বলেছে, এটি দীর্ঘ এবং পিছনে ফেলে দেওয়া আবার নির্বোধ বলে মনে হচ্ছে।
রায়ান ডাফিল্ড

আমার এই সব পরে প্রয়োজন। এক্সটেনশনটি আরও ভালভাবে পরিচালনা করতে পারে
ব্রায়ান জি

5
স্ট্রিং হিসাবে নম্বর রাখার জন্য +1 (প্রায়শই স্বয়ংক্রিয় এসএমএস সিস্টেমের জন্য ব্যবহৃত ফোন নম্বরগুলি +44 ফর্ম্যাটে সংরক্ষণ করতে হবে)
এড জেমস

3
আমি বিভিন্ন ফর্ম্যাটগুলির সাথে কাজ করছি (উদাঃ (111) 222-4444, 111.222.4444, ইত্যাদি) তবে এগুলি (111) 222-4444 এ স্বাভাবিক করার প্রয়োজন। আমি অসম্পূর্ণ সংখ্যা থেকে রক্ষা করতে চেয়েছিলাম এবং {n, m} স্বরলিপি ব্যবহার করেছি। (এবং ফর্ম্যাটিংয়ের জন্য ক্ষমা চাইছি, তবে কিছু এমডি ফর্ম্যাট আমার পক্ষে কাজ করছে না)। // 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");
ক্রেগ বোল্যান্ড

46

আপনাকে এটি সাবস্ট্রিংগুলিতে বিভক্ত করতে হবে। আপনি যখন পারে যে কি কোনো অতিরিক্ত ভেরিয়েবল ছাড়া, বিশেষ করে চমৎকার হবে না। এখানে একটি সম্ভাব্য সমাধান:

string phone = i["MyPhone"].ToString();
string area = phone.Substring(0, 3);
string major = phone.Substring(3, 3);
string minor = phone.Substring(6);
string formatted = string.Format("{0}-{1}-{2}", area, major, minor);

জন আপনি কি নিশ্চিত যে স্ট্রিং.ফর্ম্যাট ব্যবহারের চেয়ে তিনটি সাবস্ট্রিং তৈরি করা ভাল?
প্রদীপ

আমি স্ট্রিং.ফর্ম্যাটটিও ব্যবহার করি - তবে আপনি স্ট্রিং.ফর্ম্যাটটি ব্যবহার না করে কীভাবে ফলাফল অর্জনের পরামর্শ দিচ্ছেন?
জন স্কিটি

2
আমি একটি if (phone.Length == 10)অবস্থায় আবৃত ।
জ্যাক পিটারসন

প্লাস ওয়ান - একটি ছোট বিন্দু: যে ফর্ম্যাটটি এরিয়া কোডের চারপাশে প্রথম বন্ধনী রয়েছে বলে মনে হচ্ছে না, সম্ভবত আমি এটি ভুল পড়ছি।
মার্ক রজার্স

1
@ মার্কর্কস: প্রশ্নটি বলছে "আমি 111-222-4444 হিসাবে ফর্ম্যাট করতে চাই" - সেখানে কোনও বন্ধনী নেই।
জন স্কিটি

28

আমি মার্কিন সংখ্যার জন্য একটি পরিষ্কার সমাধান হিসাবে এটি পরামর্শ।

public static string PhoneNumber(string value)
{ 
    if (string.IsNullOrEmpty(value)) return string.Empty;
    value = new System.Text.RegularExpressions.Regex(@"\D")
        .Replace(value, string.Empty);
    value = value.TrimStart('1');
    if (value.Length == 7)
        return Convert.ToInt64(value).ToString("###-####");
    if (value.Length == 10)
        return Convert.ToInt64(value).ToString("###-###-####");
    if (value.Length > 10)
        return Convert.ToInt64(value)
            .ToString("###-###-#### " + new String('#', (value.Length - 10)));
    return value;
}

1
এটি আমার পক্ষে এই ব্যতিক্রম নিয়ে কাজ করেছিল যে ফোনের মান প্রথমে নুল বা হোয়াইটস্পেস না হয় তা নিশ্চিত করার জন্য আমাকে একটি চেক যোগ করতে হয়েছিল।
কেভেরম্যান

1
উপরোক্ত
সমস্তগুলি

22

যতদূর আমি জানি আপনি স্ট্রিং দিয়ে এটি করতে পারবেন না For ফর্ম্যাট ... আপনার নিজেরাই এটি পরিচালনা করতে হবে। আপনি কেবল সমস্ত অ-সংখ্যাসূচক অক্ষরগুলি সরিয়ে ফেলতে পারেন এবং তারপরে এমন কিছু করতে পারেন:

string.Format("({0}) {1}-{2}",
     phoneNumber.Substring(0, 3),
     phoneNumber.Substring(3, 3),
     phoneNumber.Substring(6));

এটি ধরে নিয়েছে যে ডেটা সঠিকভাবে প্রবেশ করা হয়েছে, যা আপনি যাচাই করার জন্য নিয়মিত অভিব্যক্তি ব্যবহার করতে পারেন।


4
এবং এটি একটি উত্তর আমেরিকান ফোন নম্বর
ধরেছে

19

এই কাজ করা উচিত:

String.Format("{0:(###)###-####}", Convert.ToInt64("1112224444"));

বা আপনার ক্ষেত্রে:

String.Format("{0:###-###-####}", Convert.ToInt64("1112224444"));

3
1 ছোট সমস্যা যদি আমি 01213456789 ব্যবহার করি তবে এর (12) 345-6789 ... কোনও সমাধান ...?
সংগ্রাম নন্দখিল

5
এটিই সেরা সমাধান। শূন্য বা এক দিয়ে শুরু হওয়া কোনও আমেরিকান অঞ্চল কোড নেই বলে আমেরিকান ফোন নম্বরগুলির বিষয়ে শীর্ষস্থানীয় শূন্যটি হ'ল।
জেবি

ছোট সমস্যা যদি আমি 12345678 চেষ্টা করে তবে এটি ফর্ম্যাট করে (1) 234-5678 ... তবে আমার যা প্রয়োজন তা হল (123) 456-78। এটির জন্য কি কোন সমাধান আছে? ধন্যবাদ
কবিতা পি।

14

আপনি যদি এটি i["MyPhone"]হিসাবে পেতে পারেন তবে আপনি এটিকে ফর্ম্যাট করতে পদ্ধতিটি longব্যবহার করতে পারেন long.ToString():

Convert.ToLong(i["MyPhone"]).ToString("###-###-####");

সংখ্যার ফর্ম্যাট স্ট্রিংয়ের এমএসডিএন পৃষ্ঠাটি দেখুন ।

Int এর চেয়ে দীর্ঘ ব্যবহার করার ক্ষেত্রে সতর্ক থাকুন: intটি প্রবাহিত হতে পারে।


1
এটির সাথে সমস্যাটি হ'ল যদি সংখ্যাটি 10 ​​টি অক্ষর দীর্ঘ হয় (যেমন একটি এক্সটেনশন অন্তর্ভুক্ত)। এটির ফলাফলটি অত্যন্ত বিশিষ্ট উপস্থাপনার যেখানে 212-555-1212 x1234 হিসাবে প্রকাশিত হয়2125551-212-1234.
মাইকেল ব্ল্যাকবার্ন

5
static string FormatPhoneNumber( string phoneNumber ) {

   if ( String.IsNullOrEmpty(phoneNumber) )
      return phoneNumber;

   Regex phoneParser = null;
   string format     = "";

   switch( phoneNumber.Length ) {

      case 5 :
         phoneParser = new Regex(@"(\d{3})(\d{2})");
         format      = "$1 $2";
       break;

      case 6 :
         phoneParser = new Regex(@"(\d{2})(\d{2})(\d{2})");
         format      = "$1 $2 $3";
       break;

      case 7 :
         phoneParser = new Regex(@"(\d{3})(\d{2})(\d{2})");
         format      = "$1 $2 $3";
       break;

      case 8 :
         phoneParser = new Regex(@"(\d{4})(\d{2})(\d{2})");
         format      = "$1 $2 $3";
       break;

      case 9 :
         phoneParser = new Regex(@"(\d{4})(\d{3})(\d{2})(\d{2})");
         format      = "$1 $2 $3 $4";
       break;

      case 10 :
         phoneParser = new Regex(@"(\d{3})(\d{3})(\d{2})(\d{2})");
         format      = "$1 $2 $3 $4";
       break;

      case 11 :
         phoneParser = new Regex(@"(\d{4})(\d{3})(\d{2})(\d{2})");
         format      = "$1 $2 $3 $4";
       break;

      default:
        return phoneNumber;

   }//switch

   return phoneParser.Replace( phoneNumber, format );

}//FormatPhoneNumber

    enter code here

ইনপুট: 1234567890 আউটপুট: 123 456 78 90 কাজ করে না
MC9000

5

যদি আপনার (ইউএস) ফোন নম্বরটি রিয়েল টাইমে রূপান্তরিত করা হয়। আমি এই এক্সটেনশনটি ব্যবহার করার পরামর্শ দিচ্ছি। এই পদ্ধতিটি পিছনের দিকে সংখ্যাগুলি না পূরণ করে পুরোপুরি কাজ করে। String.Formatসমাধান কাজ পিছন বলে মনে হচ্ছে। আপনার স্ট্রিংয়ে কেবল এই এক্সটেনশনটি প্রয়োগ করুন।

public static string PhoneNumberFormatter(this string value)
{
    value = new Regex(@"\D").Replace(value, string.Empty);
    value = value.TrimStart('1');

    if (value.Length == 0)
        value = string.Empty;
    else if (value.Length < 3)
        value = string.Format("({0})", value.Substring(0, value.Length));
    else if (value.Length < 7)
        value = string.Format("({0}) {1}", value.Substring(0, 3), value.Substring(3, value.Length - 3));
    else if (value.Length < 11)
        value = string.Format("({0}) {1}-{2}", value.Substring(0, 3), value.Substring(3, 3), value.Substring(6));
    else if (value.Length > 10)
    {
        value = value.Remove(value.Length - 1, 1);
        value = string.Format("({0}) {1}-{2}", value.Substring(0, 3), value.Substring(3, 3), value.Substring(6));
    }
    return value;
}

এগিয়ে চলা জন্য নিখুঁত কাজ করে। কিন্তু ফিরে আসার পরে, এটি আটকা পড়ে যায় (###) এর প্রথম বিন্যাসে।
শোয়াগমিস্টার

পছন্দ করুন এটি সংশোধন করা হয়েছে এবং আমার সাধারণ ব্যবহারের জন্য একটি এক্সটেনশনে কোড রিফেক্টর করেছি।
জেমস কোপল্যান্ড

4

আপনি এটি ব্যবহার করে দেখতে পারেন:

  public string GetFormattedPhoneNumber(string phone)
        {
            if (phone != null && phone.Trim().Length == 10)
                return string.Format("({0}) {1}-{2}", phone.Substring(0, 3), phone.Substring(3, 3), phone.Substring(6, 4));
                return phone;
        }

আউটপুট:

এখানে চিত্র বর্ণনা লিখুন


1
সচেতন থাকুন যে বিভিন্ন দেশে বিভিন্ন ফর্ম্যাট এবং দৈর্ঘ্যের ফোন নম্বর রয়েছে এবং লোকেরা সেগুলিতে প্রবেশ করতে পারবে না।
নিম

আমি কীভাবে এটি এইচটিএমএল.ডিসপ্লেফোর্ড (মডেল => মডেল.ফোন নম্বর) দিয়ে ব্যবহার করব?
জাস্টজহান

আমি এটি ব্যবহার করেছি এবং এটি রেজার পৃষ্ঠা প্রদর্শনে কীভাবে ব্যবহার করব তা ভেবেছিলাম। আমি এটিকে পৃষ্ঠার শীর্ষে @ ফাংশন}} ব্লকে রেখেছি। তারপরে আমি @ এইচটিএমএল.ডিসপ্লে ফোর্স সহায়ক থেকে মুক্তি পেয়েছি এবং সবেমাত্র ফাংশনটি রেফারেন্স করেছি: ................. @ গেটফর্ম্যাটফোনফোন নাম্বার (মডেল.কোর্সেস_নউ। ক্রোড়নকন্ট্যাক্টফোন) আমার দিন তৈরি!
জাস্টজহান

4

আপনি এমন পরিস্থিতিতে নিজেকে পেতে পারেন যেখানে আপনি ব্যবহারকারীরা অঞ্চল কোড এবং প্রধান নম্বর ব্লকের (যেমন, স্পেস, ড্যাশ, পিরিয়ডস, ইসট ... ...) এর মধ্যে বিভক্ত সমস্ত প্রকারের সাথে ফোন নম্বর প্রবেশ করার চেষ্টা করছেন যাতে আপনি চান সমস্ত অক্ষরের ইনপুট স্ট্রিপ করুন যা সংখ্যা নয় যাতে আপনি যে ইনপুটটির সাথে কাজ করছেন তা নির্বীজন করতে পারেন। এটি করার সবচেয়ে সহজ উপায় একটি রেজিএক্স এক্সপ্রেশন expression

string formattedPhoneNumber = new System.Text.RegularExpressions.Regex(@"\D")
    .Replace(originalPhoneNumber, string.Empty);

তারপরে আপনার তালিকাভুক্ত উত্তরটি বেশিরভাগ ক্ষেত্রেই কাজ করা উচিত।

আপনার এক্সটেনশান ইস্যু সম্পর্কে আপনার যা আছে তার জবাব দিতে, আপনি দশটির প্রত্যাশিত দৈর্ঘ্যের (নিয়মিত ফোন নম্বর) এর চেয়ে দীর্ঘ যে কোনও কিছু ছিনিয়ে নিতে পারেন এবং এটি ব্যবহার করে শেষটি যুক্ত করতে পারেন

formattedPhoneNumber = Convert.ToInt64(formattedPhoneNumber)
     .ToString("###-###-#### " + new String('#', (value.Length - 10)));

আপনার ইনপুটটির দৈর্ঘ্য 10 এর আগে 10 এর চেয়ে বেশি কিনা তা নির্ধারণ করতে আপনি 'যদি' পরীক্ষা করতে চান তবে তা না করে কেবল ব্যবহার করুন:

formattedPhoneNumber = Convert.ToInt64(value).ToString("###-###-####");

3
Function FormatPhoneNumber(ByVal myNumber As String)
    Dim mynewNumber As String
    mynewNumber = ""
    myNumber = myNumber.Replace("(", "").Replace(")", "").Replace("-", "")
    If myNumber.Length < 10 Then
        mynewNumber = myNumber
    ElseIf myNumber.Length = 10 Then
        mynewNumber = "(" & myNumber.Substring(0, 3) & ") " &
                myNumber.Substring(3, 3) & "-" & myNumber.Substring(6, 3)
    ElseIf myNumber.Length > 10 Then
        mynewNumber = "(" & myNumber.Substring(0, 3) & ") " &
                myNumber.Substring(3, 3) & "-" & myNumber.Substring(6, 3) & " " &
                myNumber.Substring(10)
    End If
    Return mynewNumber
End Function

ভোট দিয়েছেন তবে ... এটি একটি vb.net উত্তর এবং প্রশ্নটি সি #

ইনপুট: 1234567890 আউটপুট: (123) 456-789 কাজ করে না!
এমসি 9000

3
        string phoneNum;
        string phoneFormat = "0#-###-###-####";
        phoneNum = Convert.ToInt64("011234567891").ToString(phoneFormat);

2

এটা চেষ্টা কর

string result;
if ( (!string.IsNullOrEmpty(phoneNumber)) && (phoneNumber.Length >= 10 ) )
    result = string.Format("{0:(###)###-"+new string('#',phoneNumber.Length-6)+"}",
    Convert.ToInt64(phoneNumber)
    );
else
    result = phoneNumber;
return result;

চিয়ার্স।


2

রেজেক্সে ম্যাচটি বিভক্ত করতে ব্যবহার করুন, তারপরে ম্যাচ.groups সহ ফর্ম্যাট করা স্ট্রিং

Regex regex = new Regex(@"(?<first3chr>\d{3})(?<next3chr>\d{3})(?<next4chr>\d{4})");
Match match = regex.Match(phone);
if (match.Success) return "(" + match.Groups["first3chr"].ToString() + ")" + " " + 
  match.Groups["next3chr"].ToString() + "-" + match.Groups["next4chr"].ToString();

2

নিম্নলিখিতটি নিয়মিত অভিব্যক্তি ব্যবহারের সাথে কাজ করবে

string primaryContactNumber = !string.IsNullOrEmpty(formData.Profile.Phone) ? String.Format("{0:###-###-####}", long.Parse(formData.Profile.Phone)) : "";

যদি আমরা দীর্ঘ ব্যবহার না করি ars পার্স, স্ট্রিং.ফর্ম্যাট কাজ করবে না।


1
public string phoneformat(string phnumber)
{
String phone=phnumber;
string countrycode = phone.Substring(0, 3); 
string Areacode = phone.Substring(3, 3); 
string number = phone.Substring(6,phone.Length); 

phnumber="("+countrycode+")" +Areacode+"-" +number ;

return phnumber;
}

আউটপুট হবে: 001-568-895623


1

সি # http://www.beansoftware.com / নেট- টিউটোরিয়ালস / ফর্ম্যাট- স্ট্রিং- ফোন- number.aspx জন্য নিম্নলিখিত লিঙ্কটি ব্যবহার করুন

ফর্ম্যাটটি করার সহজতম উপায় হ'ল রেজেক্স using

private string FormatPhoneNumber(string phoneNum)
{
  string phoneFormat = "(###) ###-#### x####";

  Regex regexObj = new Regex(@"[^\d]");
  phoneNum = regexObj.Replace(phoneNum, "");
  if (phoneNum.Length > 0)
  {
    phoneNum = Convert.ToInt64(phoneNum).ToString(phoneFormat);
  }
  return phoneNum;
}

152 অবধি 2021231234 স্ট্রিং হিসাবে আপনার ফোননমটি পাস করুন।

FormatPhoneNumber(string phoneNum)

আরেকটি পন্থা সাবস্ট্রিং ব্যবহার করা হবে

private string PhoneFormat(string phoneNum)
    {
      int max = 15, min = 10;
      string areaCode = phoneNum.Substring(0, 3);
      string mid = phoneNum.Substring(3, 3);
      string lastFour = phoneNum.Substring(6, 4);
      string extension = phoneNum.Substring(10, phoneNum.Length - min);
      if (phoneNum.Length == min)
      {
        return $"({areaCode}) {mid}-{lastFour}";
      }
      else if (phoneNum.Length > min && phoneNum.Length <= max)
      {
        return $"({areaCode}) {mid}-{lastFour} x{extension}";
      }
      return phoneNum;
    }

0

আপনার এক্সটেনশান ইস্যুটির যত্ন নিতে, কীভাবে:

string formatString = "###-###-#### ####";
returnValue = Convert.ToInt64(phoneNumber)
                     .ToString(formatString.Substring(0,phoneNumber.Length+3))
                     .Trim();

0

কোনও পুরানো প্রশ্নকে পুনরুত্থিত করার জন্য নয় তবে চিত্রিত হয়েছে আমি যদি সেটআপটি আরও কিছুটা জটিল করে থাকি তবে আমি কমপক্ষে কিছুটা সহজ পদ্ধতি ব্যবহার করতে পারি।

সুতরাং আমরা যদি একটি নতুন কাস্টম ফর্ম্যাটর তৈরি করি তবে আমরা string.Formatআমাদের ফোন নম্বরটিকে একটিতে রূপান্তর না করেই এর সরল বিন্যাসটি ব্যবহার করতে পারিlong

সুতরাং প্রথমে কাস্টম বিন্যাস তৈরি করতে দিন:

using System;
using System.Globalization;
using System.Text;

namespace System
{
    /// <summary>
    ///     A formatter that will apply a format to a string of numeric values.
    /// </summary>
    /// <example>
    ///     The following example converts a string of numbers and inserts dashes between them.
    ///     <code>
    /// public class Example
    /// {
    ///      public static void Main()
    ///      {          
    ///          string stringValue = "123456789";
    ///  
    ///          Console.WriteLine(String.Format(new NumericStringFormatter(),
    ///                                          "{0} (formatted: {0:###-##-####})",stringValue));
    ///      }
    ///  }
    ///  //  The example displays the following output:
    ///  //      123456789 (formatted: 123-45-6789)
    ///  </code>
    /// </example>
    public class NumericStringFormatter : IFormatProvider, ICustomFormatter
    {
        /// <summary>
        ///     Converts the value of a specified object to an equivalent string representation using specified format and
        ///     culture-specific formatting information.
        /// </summary>
        /// <param name="format">A format string containing formatting specifications.</param>
        /// <param name="arg">An object to format.</param>
        /// <param name="formatProvider">An object that supplies format information about the current instance.</param>
        /// <returns>
        ///     The string representation of the value of <paramref name="arg" />, formatted as specified by
        ///     <paramref name="format" /> and <paramref name="formatProvider" />.
        /// </returns>
        /// <exception cref="System.NotImplementedException"></exception>
        public string Format(string format, object arg, IFormatProvider formatProvider)
        {
            var strArg = arg as string;

            //  If the arg is not a string then determine if it can be handled by another formatter
            if (strArg == null)
            {
                try
                {
                    return HandleOtherFormats(format, arg);
                }
                catch (FormatException e)
                {
                    throw new FormatException(string.Format("The format of '{0}' is invalid.", format), e);
                }
            }

            // If the format is not set then determine if it can be handled by another formatter
            if (string.IsNullOrEmpty(format))
            {
                try
                {
                    return HandleOtherFormats(format, arg);
                }
                catch (FormatException e)
                {
                    throw new FormatException(string.Format("The format of '{0}' is invalid.", format), e);
                }
            }
            var sb = new StringBuilder();
            var i = 0;

            foreach (var c in format)
            {
                if (c == '#')
                {
                    if (i < strArg.Length)
                    {
                        sb.Append(strArg[i]);
                    }
                    i++;
                }
                else
                {
                    sb.Append(c);
                }
            }

            return sb.ToString();
        }

        /// <summary>
        ///     Returns an object that provides formatting services for the specified type.
        /// </summary>
        /// <param name="formatType">An object that specifies the type of format object to return.</param>
        /// <returns>
        ///     An instance of the object specified by <paramref name="formatType" />, if the
        ///     <see cref="T:System.IFormatProvider" /> implementation can supply that type of object; otherwise, null.
        /// </returns>
        public object GetFormat(Type formatType)
        {
            // Determine whether custom formatting object is requested. 
            return formatType == typeof(ICustomFormatter) ? this : null;
        }

        private string HandleOtherFormats(string format, object arg)
        {
            if (arg is IFormattable)
                return ((IFormattable)arg).ToString(format, CultureInfo.CurrentCulture);
            else if (arg != null)
                return arg.ToString();
            else
                return string.Empty;
        }
    }
}

সুতরাং আপনি যদি এটি ব্যবহার করতে চান তবে আপনি এটি কিছু করতে হবে:

String.Format(new NumericStringFormatter(),"{0:###-###-####}", i["MyPhone"].ToString());

অন্যান্য কিছু বিষয় যা ভাবতে হবে:

এখনই যদি আপনি ফর্ম্যাট করার জন্য স্ট্রিংয়ের চেয়ে দীর্ঘতর ফর্ম্যাটর নির্দিষ্ট করে থাকেন তবে এটি অতিরিক্ত # চিহ্নগুলি উপেক্ষা করবে। উদাহরণস্বরূপ String.Format(new NumericStringFormatter(),"{0:###-###-####}", "12345");এটির ফলাফল 123-45- এর ফলে আপনি এটি নির্মাণে কোনও ধরণের সম্ভাব্য ফিলার চরিত্রটি গ্রহণ করতে চাইতে পারেন।

এছাড়াও আমি একটি # চিহ্ন থেকে বাঁচার কোনও উপায় সরবরাহ করি নি তাই আপনি যদি নিজের আউটপুট স্ট্রিংয়ে এটি অন্তর্ভুক্ত করতে চান তবে আপনি এখনই ঠিক সেইভাবে সক্ষম হতে পারবেন না।

আমি রেজেক্সের চেয়ে এই পদ্ধতির পছন্দ করার কারণটি আমার প্রায়শই ব্যবহারকারীদের নিজেরাই ফর্ম্যাটটি নির্দিষ্ট করার অনুমতি দেওয়ার প্রয়োজন হয় এবং কোনও ব্যবহারকারী রেজেক্স শেখানোর চেষ্টা করার চেয়ে এই ফর্ম্যাটটি কীভাবে ব্যবহার করতে হয় তা ব্যাখ্যা করা আমার পক্ষে যথেষ্ট সহজ।

এছাড়াও বর্গের নামটি কিছুটা ভুল ধারণাযুক্ত, যেহেতু এটি যতক্ষণ না আপনি একে একই ক্রমে রাখতে চান এবং কেবল এর ভিতরে অক্ষরগুলি ইনজেক্ট করতে চান ততক্ষণ কোনও স্ট্রিংকে ফর্ম্যাট করতে কাজ করে।


0

যদি আপনার টার্গেট নম্বর 0 দিয়ে শুরু হয় তবে আপনি {0: (000) 000 - #### try চেষ্টা করতে পারেন।


0

এটি করার আরেকটি উপায় এখানে।

public string formatPhoneNumber(string _phoneNum)
{
    string phoneNum = _phoneNum;
    if (phoneNum == null)
        phoneNum = "";
    phoneNum = phoneNum.PadRight(10 - phoneNum.Length);
    phoneNum = phoneNum.Insert(0, "(").Insert(4,") ").Insert(9,"-");
    return phoneNum;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.