تحويل تطبيع رقم الهاتف إلى نسخة سهلة الاستعمال

StackOverflow https://stackoverflow.com/questions/425814

سؤال

في C# التطبيق ، وأنا استخدم التعبير العادية للتحقق من الشكل الأساسي من لنا رقم الهاتف للتأكد من أن المستخدم ليس فقط إدخال بيانات وهمية.ثم خلع كل شيء ماعدا الأرقام ، لذلك هذا:

(123) 456-7890 x1234

يصبح

12345678901234

في قاعدة البيانات.في أجزاء مختلفة من التطبيق ، ومع ذلك ، أود أن تحويل هذا تطبيع رقم الهاتف مرة أخرى إلى

(123) 456-7890 x1234

ما هي أفضل طريقة أن تفعل مثل هذا الشيء ؟ (لا تقلق بشأن المحاسبة الدولي رقم الهاتف صيغ بالمناسبة....)

هل كانت مفيدة؟

المحلول

String.Format("{0:(###) ###-#### x ###}", double.Parse("1234567890123"))

هل يؤدي في (123) 456-7890 x 123

نصائح أخرى

وباستخدام التعابير المنطقية التي يمكن أن تحل محل:

(\d{3})(\d{3})(\d{4})(\d{4})

ومع:

(\1) \2-\3 x\4

و(على الرغم من أنني لست على دراية أرقام هواتف الولايات المتحدة ولذلك ربما يكون هناك أكثر من ذلك).

وأود أن مجرد استخدام سلسلة تنسيق مخصص لتحويل عدد مرة أخرى في سلسلة:

class Program
{
    static void Main(string[] args)
    {
        long phoneNumber = 12345678901234;
        string phoneNumberString = String.Format("{0:(000) 000-0000 x0000}", phoneNumber);
        Console.WriteLine(phoneNumberString);
    }
}

وبطبيعة الحال، فإن كنت عاملا بها إلى وظيفة التي من شأنها أن تأخذ رقم الهاتف بمثابة فترة طويلة ومن ثم العودة السلسلة (على شكل تحميلها أو تخزينها على شكل ثابت في الأسلوب، أو شيء من هذا المناسبة تبعا للموقف الخاص بك).

وأوه، وإذا كان لديك في سلسلة وليس لفترة طويلة، يمكنك بسهولة تحويل السلسلة إلى فترة طويلة، ومن ثم نقله إلى وظيفة الشكل. بالطبع، هناك اعتبارات الأداء هنا إذا كنت تفعل ذلك مرارا وتكرارا (منذ كنت بالتكرار سلسلة لإنشاء طويلة، ومن ثم تحويلها إلى سلسلة، عندما يمكن ان مجرد استخدام فرعية).

إذا كنت دعم لنا الأرقام, هل يمكن ببساطة تنسيق الأرقام تظهر بين قوسين و x أينما تريد.

أنا أفضل لتخزين السلسلة بأكملها ، أود أن تحليل ذلك باستخدام التعابير المنطقية إلى التحقق من صحة ذلك ، ثم تخزينها في تطبيع السلسلة.

لجعلها تقبل أي بلد ، أود أن تفعل هذا:

وأود أن أضيف IDD رمز إلى جميع أرقام الهاتف ، ثم إخفائه من المستخدمين من هذا البلد.

لذلك:(123) 456-7890 x1234 سيكون تخزين +1 (123) 456-7890 x1234

على (بيرل-متوافق) regex سيكون شيئا مثل (تماما مجربة و لا عمل) :

(+\d+)?\s+(((\d{,3}))(?\s+([-.0-9]{6,})\s+((س|ext\w*)\d{,4})

  • هذا هو اختياري عدد من الأرقام يسبقه +
  • تليها واحد أو أكثر من الأماكن
  • ثم اختياري مجموعة من ما يصل إلى 3 أرقام بين قوسين
  • ثم واحد أو أكثر من الأماكن
  • ثم مجموعة من 6 أو أكثر من الأرقام ، شرطات أو النقاط
  • ثم واحد أو أكثر من الأماكن
  • ثم اختياري x أو الكلمة التي تبدأ مع تحويلة (تحويلة امتداد ...) ومجموعة من 4 أرقام

وأود أن يكون لها قاعدة بيانات المستخدمين بما في ذلك البلد ورمز المنطقة ، ثم ملء هذه تلقائيا في حالة انهم في عداد المفقودين ، الافتراضية تجميع الأرقام اتفاقية أرقام الهاتف (3,4 الولايات المتحدة).

  • حتى إذا كنت في منطقة 123 في الولايات المتحدة ، وأدخل 456.7890 ، سيكون من تحليل مثل +1 (123) 4567890 ، كنت فقط أرى أنها 456-7890
  • إذا كنت في قطر ، أدخل عدد 4444555 extenshn 33 ، ويتم تخزينها +974 4444555 x33, كنت أرى أنها 4444555 x33

المدونة الدولية لن يتم عرضها على المستخدمين في نفس البلد ، ورمز المنطقة لن يتم عرضها على المستخدمين في نفس البلد ورمز المنطقة.العدد الكامل سيتم عرضها onmouseover (HTML التسمية؟)

هل لديك لكسرها نزولا لDB؟ إن لم يكن، لا. إذا كان يجب عليك، ثم يمكنك إما تخزين أجزاء مختلفة في مجالات مختلفة، (Areacode، بادئة، SubscriberNum، Extenion).

وأو استخراج الرقم، والبدء في التوزيع. لو كان فقط 10 أرقام، ثم أنكم تعلمون أن هناك أي تمديد. جميع الأرقام السابقة 10، عصا لهم في السلسلة بعد 'س' أو شيء من هذا.

وفعلت شيئا مشابها لهذا في C ++ التطبيق كتبت آليات الاتصال المختلفة المخزنة على سلسلة واحدة، ولكن بدلا من ذلك، فعلت عكس ما تقومون به. أخذت حقول قبالة الحوار، وبناء عدد مهيأ لتخزين كسلسلة.

إليك طريقة التمديد التي قد تساعد على:

public static string InsertStringAtPositions(this string str, string insertStr, IEnumerable<int> positions)
{
    if (str != null && insertStr != null && positions != null)
    {
        string newString = string.Empty;
        int previousPos = 0;
        foreach (var pos in positions)
        {
            if (pos < str.Length)
            {
                newString += str.Substring(previousPos, pos - previousPos) + insertStr;
                previousPos = pos;
            }
        }
        if (positions.Last() < str.Length)
        {
            return newString + str.Substring(positions.Last(), str.Length - positions.Last());
        }
        return newString;
    }
    return str;
}

والاستعمال:

// Will convert "0399998888" to "03 9999 8888"
number.InsertStringAtPositions(" ", new[] {2, 6});
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top