কীভাবে ফোন নম্বরগুলি রেগেক্স ব্যবহার করে যাচাই করবেন


920

আমি ফোন নম্বরগুলি বৈধ করার জন্য একটি বিস্তৃত রেজেেক্স একসাথে রাখার চেষ্টা করছি। আদর্শভাবে এটি আন্তর্জাতিক ফর্ম্যাটগুলি পরিচালনা করতে পারে তবে এটি অবশ্যই মার্কিন যুক্তরাষ্ট্রে হ্যান্ডেল করতে হবে, নিম্নলিখিতগুলি সহ:

  • 1-234-567-8901
  • 1-234-567-8901 x1234
  • 1-234-567-8901 ext1234
  • 1 (234) 567-8901
  • 1.234.567.8901
  • 1/234/567/8901
  • 12345678901

আমি আমার বর্তমান প্রয়াস দিয়ে উত্তর দেব, তবে আমি আশা করছি কারও কাছে আরও ভাল এবং / অথবা আরও মার্জিত হতে পারে।


3
বিটিডাব্লু, আপনি কোন ভাষাটি ব্যবহার করছেন তা নির্দিষ্ট করা উচিত। সমস্ত রেজেক্স ইঞ্জিনের একই সিনট্যাক্স থাকে না।
অ্যান্ড্রুজেফোর্ড

9
দেখে মনে হচ্ছে যে আপনি কেবল 1 এর পরিবর্তে +1 বিকল্পটি বাদ দিয়েছেন যদিও উত্তরটি এই কেসটিকে অন্তর্ভুক্ত করে।
এরিক

153
সমস্ত মার্কিন ফোন নম্বরগুলি এগুলিতে 555আলাদা করা দরকার না 911?
অ্যান্ড্রু গ্রিম ২

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

49
@ রাশিঞ্জ যদিও দশক আগে এটি সত্য ছিল, এখন আর তা সত্য নয় । 555 উপসর্গটি এখনও বিশেষ, তবে 555-0100 থেকে 555-0199 সংযোগ ছাড়াই কেবল একটি সংখ্যক সংখ্যক সংখ্যক অবসান গ্যারান্টিযুক্ত। তবে আমি নিশ্চিত যে অ্যান্ড্রু যেভাবেই মজা করছিল।
অ্যাডাম ডেভিস

উত্তর:


515

সর্বোত্তম বিকল্প ... কেবলমাত্র ইনপুটটিতে সমস্ত অ-অঙ্কের অক্ষরগুলি সরিয়ে ফেলুন ('x' এবং শীর্ষস্থানীয় '+' চিহ্নগুলি বাদ দিয়ে), ব্রিটিশদের অ-মানক আকারে সংখ্যা লেখার প্রবণতার কারণে যত্ন নিতে +44 (0) ...যখন আন্তর্জাতিক উপসর্গটি ব্যবহার করতে বলা হয় (নির্দিষ্ট ক্ষেত্রে, আপনার (0)পুরোপুরি বাতিল করা উচিত )।

তারপরে, আপনি যেমন:

 12345678901
 12345678901x1234
 345678901x1234
 12344678901
 12345678901
 12345678901
 12345678901
 +4112345678
 +441234567890

তারপরে আপনি যখন প্রদর্শন করবেন তখন আপনার হৃদয়ের সামগ্রীগুলিতে পুনরায় ফর্ম্যাট করুন। যেমন

  1 (234) 567-8901
  1 (234) 567-8901 x1234

35
নম্বর মার্কিন যুক্তরাষ্ট্রে থেকে আসতে অনুমতি দেওয়া হলে ফর্ম্যাটিং কোড সময় নষ্ট হতে চলেছে।
ড্যানিয়েল আর্উইকার

26
এটি সর্বোত্তম এবং সমস্ত, তবে যা প্রবেশ করানো হয়েছিল তা আসলে একটি ফোন নম্বর ছিল তা যাচাই করে না। উদাহরণস্বরূপ, যদি ব্যবহারকারী প্রয়োজনীয় 10 ডিজিট প্রবেশ না করে? এটি ভাল রেগেক্স বৈধতার সাথে একত্রিত হওয়া উচিত।
হিউ জেফনার

108
প্রশ্নটি বিবেচনা করা বৈধতা সম্পর্কে ছিল - এটি সত্যিই একটি খারাপ উত্তর।
PlexQ

15
পছন্দ করুন মূল সমস্যাটি ফোন নম্বর বৈধতা হ্যান্ডেল করার চেষ্টা করছে কারণ এটি সম্ভাব্য সমস্ত বিন্যাস বিকল্পগুলি হ্যান্ডেল করার চেষ্টা করেছিল। সমস্ত সমাধান করার চেষ্টা করার পরিবর্তে, আপনার কেবল "নম্বর" না হওয়া পর্যন্ত ইনপুটটি নিন এবং সমস্ত ফর্ম্যাটিং ফ্লাফের "প্রাক-স্ট্রিপ" নিন। এটি করা 2 টি সমস্যার সমাধান করে - ফলাফলটি পরীক্ষা করা এখন সহজ এবং আপনি এখন নিশ্চিত করতে পারবেন যে প্রদর্শনের জন্য ফিরে দেওয়া মানগুলি সমস্ত ধারাবাহিকভাবে ফর্ম্যাট করা যায়। "কমপ্লেক্সারের গ্লাভস" সম্পর্কে এই উত্তরের প্রথম মন্তব্যটি একটি ভাল পঠিত ... কখনও কখনও কোনও সমস্যার উত্তর হ'ল এটি আলাদাভাবে যাওয়া।
স্কানলিফ

29
এতো উচ্চ ভোটের উত্তর কীভাবে? এটি কোনও কিছুর বৈধতা দেয় না । সবচেয়ে
খারাপটি হ'ল

303

দেখা যাচ্ছে যে এটির জন্য একটি অনুমানের কিছু আছে, কমপক্ষে উত্তর আমেরিকার জন্য, যাকে বলা হয় এনএনপি

আপনি ঠিক কি চান তা নির্দিষ্ট করা দরকার। আইনী সীমানা কি? স্পেস, ড্যাশ এবং পিরিয়ড? কোন সীমানার অনুমতি নেই? একটি কি সীমানা বিভক্ত করতে পারে (উদাঃ, + 0.111-222.3333)? কীভাবে এক্সটেনশানগুলি (উদাহরণস্বরূপ, 111-222-3333 x 44444) পরিচালনা করা যাচ্ছে? 911 এর মতো বিশেষ সংখ্যাগুলি সম্পর্কে কী বলা যায়? অঞ্চল কোডটি কি alচ্ছিক বা প্রয়োজনীয় হতে চলেছে?

এখানে 7 বা 10 ডিজিটের সংখ্যার জন্য একটি রেজেক্স রয়েছে, এক্সটেনশনগুলি অনুমোদিত, ডিলিমিটর হ'ল স্পেস, ড্যাশ বা পিরিয়ড:

^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$

7
এখানে এটি এক্সটেনশন বিভাগ ছাড়াই রয়েছে (আমি আমার ব্যবহারকারীদের একটি পৃথক ক্ষেত্রে এক্সট প্রবেশ করিয়ে দেব): ^ (?: ((?: \ +? 1 \ s * (?: [[--] * s *)?)?) (? : (\ গুলি * ([2-9] 1 [02-9] | [2-9] [02-8] 1 | [2-9] [02-8] [02-9]) \ গুলি *) | ([2-9] 1 [02-9] | [2-9] [02-8] 1 | [2-9] [02-8] [02-9])) \ গুলি * (: [ .-] \ গুলি *)) ([2-9] 1 [02-9] |? [2-9] [02-9] 1 | [2-9] [02-9] {2}) \ s * (?: [.-] \ s *)? ([0-9] {4}) $
অ্যারোনায়

18
এখানে এমন একটি সংস্করণ রয়েছে যা কেবলমাত্র 10 ডিজিটের ফোন নম্বরগুলির সাথে মেলে (843-1212 এর মতো 7 সংখ্যার নয়): /(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})/
ব্রায়ান আর্মস্ট্রং

8
10 ডিজিট অঞ্চল কোডের চারপাশে () গ্রহণ করে এবং 1 টির আগে কোড হিসাবে অনুমোদন দেয় না(?:(?:(\s*\(?([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\)?\s*(?:[.-]\s*)?)([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})
ব্রুক।

5
@ স্টিভেনসোরোকা আমার কাছে গত দু'বছর ধরে ডেস্কে আমার পাশে জেফ্রি ফ্রেডেলের বই ছিল, কারণ নিয়মিত প্রকাশ আমার কাজের একটি বড় অংশ। সত্যিই নিয়মিত এক্সপ্রেশন বুঝতে এটি বেশ সময় নেয়। কখনও কখনও, এই সাইটের পাঠকরা তাদের নিজস্ব লেখার চেয়ে কেবল একটি বিদ্যমান দ্রাব্য সন্ধান করছেন, বিশেষত ফোন নম্বর উপস্থাপনার মতো প্রচুর কোণার ক্ষেত্রে ডোমেনগুলিতে।
জাস্টিন আর

7
@ ফ্যাটক্যাট 1111 আমি এটি বুঝতে পারি, তবে এখানকার বেশিরভাগ প্রতিক্রিয়া হ'ল "আমিও" একজাতীয় নিয়মিত অভিব্যক্তির ধরণের যা সম্ভবত আপনার কোনও কোণার ক্ষেত্রে খাপ খায় না। এরপরে আমি যে সমস্ত ওয়েবসাইটগুলি ব্যবহার করার চেষ্টা করছি সেগুলি শেষ হয়ে যায় এবং আমি আমার জিপ কোড বা ফোন নম্বর বা ইমেল ঠিকানা প্রবেশ করতে পারি না কারণ কেউ অর্ধ-বেকড নিয়মিত-এক্সপ্রেশন ব্যবহার করে (যেমন: ইমেল ঠিকানাগুলিতে একটি বৈধ চরিত্র )। এই পৃষ্ঠার সেরা প্রতিক্রিয়াগুলি ব্যবহারকারীদের লাইব্রেরিগুলিতে নির্দেশ করে, ন্যাপকিন-স্ক্রোলড রেজেক্সগুলিতে নয়।
স্টিভেন সরোকা

298
.*

ব্যবহারকারীরা যদি তাদের ফোন নম্বর দিতে চান তবে তা ঠিক করার জন্য তাদের বিশ্বাস করুন। যদি তারা এটি আপনাকে দিতে না চান তবে তাদের বৈধ সংখ্যা লিখতে বাধ্য করা হয় তাদের প্রতিযোগীর সাইটে প্রেরণ করবে বা এলোমেলো স্ট্রিংয়ে প্রবেশ করবে যা আপনার রেজেক্সের সাথে মানিয়ে যায় fits এমনকি আমি প্রিমিয়াম হারের রাশিফলের হটলাইনের সংখ্যাটি সন্ধান করতে এবং তার পরিবর্তে প্রবেশ করতে প্ররোচিত হতে পারি।

আমি নিম্নলিখিত কোনওটিকে কোনও ওয়েবসাইটে বৈধ প্রবেশিকা হিসাবে বিবেচনা করব:

"123 456 7890 until 6pm, then 098 765 4321"  
"123 456 7890 or try my mobile on 098 765 4321"  
"ex-directory - mind your own business"

202
আমি এখানে অনুভূতির সাথে একমত, তবে কখনও কখনও যখন ফোন নম্বরটি ব্যবহারকারীর স্বার্থে গুরুত্বপূর্ণ কোনও কিছুর জন্য ব্যবহার করা হয় তখন বৈধতা কার্যকর করা খুব ভাল । কেনার জন্য ক্রেডিট কার্ডের অনুমোদন এখানে সেরা উদাহরণ। যদি ফোন নম্বরটি ভুল হয় তবে লেখক ব্যর্থ হতে পারে।
পয়েন্টটি

53
যদি ব্যবহারকারী তার ফোন নম্বরটি প্রবেশ করতে না চান তবে আপনি কেবল ক্ষেত্রটি alচ্ছিকভাবে চলতে দিতে পারবেন, তবে ব্যবহারকারীকে যদি কোনও প্রবেশ করতে চলেছে তবে কোনও বৈধ ফোন নম্বর লিখতে বলার কি অনেক কিছু আছে?
জোয়েল ম্যাকবেথ

11
এছাড়াও বৈধতার একটি ভূমিকা কেবল লোককে কোড কোড ইত্যাদি যুক্ত করতে স্মরণ করিয়ে দেওয়া যা তারা অন্যথায় যুক্ত করতে মনে করতে পারে না, তবে সম্ভবত এটি বাস্তবতার পরে অনুমান করা যায় না।
বেন ম্যাকআইন্টির

29
@ পয়েন্টি তবে রেজেক্স বৈধতা আপনাকে সাহায্য করবে না। ফোন নম্বরটি সঠিক হলে সত্যায়িত হওয়ার একমাত্র উপায় হ'ল এটিতে একটি বার্তা প্রেরণ করা (মোবাইলের ক্ষেত্রে) এবং নিশ্চিত হয়ে নিন যে ব্যবহারকারী কোনও ধরণের যাচাইকরণ কোড ব্যবহার করে নিশ্চিত করেছে। সংখ্যার সঠিকতা গুরুত্বপূর্ণ যখন আপনি এটি করেন। সমস্ত কিছু কেবল কিছু (তবে সমস্ত নয়) টাইপের বিরুদ্ধে রক্ষা করার জন্য ব্যবহারকারীর সুবিধার জন্য এবং কোনও কিছুরই বৈধতা দেয় না।
অ্যালেক্স বি


171

আমি " লাইবফোনেম্বার " গুগল লাইব্রেরিটি দেখার পরামর্শ দিই । আমি জানি এটি রেইজেক্স নয় তবে এটি আপনি যা চান ঠিক তা করে।

উদাহরণস্বরূপ, এটি স্বীকৃতি দেবে:

15555555555

একটি সম্ভাব্য সংখ্যা তবে বৈধ সংখ্যা নয়। এটি মার্কিন যুক্তরাষ্ট্রের বাইরের দেশগুলিকে সমর্থন করে।

কার্যকারিতা হাইলাইটস:

  • বিশ্বের সমস্ত দেশ / অঞ্চলের জন্য ফোন নম্বর পার্সিং / ফর্ম্যাটিং / যাচাইকরণ।
  • getNumberType- নিজেই সংখ্যার ভিত্তিতে সংখ্যার প্রকার পায়; ফিক্সড-লাইন, মোবাইল, টোল-ফ্রি, প্রিমিয়াম রেট, শেয়ার্ড কস্ট, ভিওআইপি এবং ব্যক্তিগত নম্বরগুলি (যখনই সম্ভব হবে) পার্থক্য করতে সক্ষম।
  • isNumberMatch - দুটি সংখ্যা একই হতে পারে কিনা তা নিয়ে একটি আত্মবিশ্বাসের স্তর অর্জন করে।
  • getExampleNumber/ getExampleNumberByType- সমস্ত দেশ / অঞ্চলের জন্য বৈধ উদাহরণ নম্বর সরবরাহ করে, কোন ধরণের উদাহরণস্বরূপ ফোন নম্বরটি নির্দিষ্ট করার বিকল্প রয়েছে।
  • isPossibleNumber - পূর্ণ সংখ্যা যাচাইয়ের চেয়ে অনেক দ্রুত, কেবলমাত্র দৈর্ঘ্যের তথ্য ব্যবহার করে কোনও সংখ্যা সম্ভাব্য ফোনেম্বার কিনা তাড়াতাড়ি অনুমান করে।
  • isValidNumber - দৈর্ঘ্য এবং উপসর্গের তথ্য ব্যবহার করে একটি অঞ্চলের জন্য ফোন নম্বরটির সম্পূর্ণ বৈধতা।
  • AsYouTypeFormatter - ব্যবহারকারীরা প্রতিটি অঙ্কে প্রবেশ করার সময় ফ্লাইটে ফোন নম্বরগুলি ফর্ম্যাট করে।
  • findNumbers - পাঠ্য ইনপুটটিতে সংখ্যাগুলি সন্ধান করে।
  • PhoneNumberOfflineGeocoder - একটি ফোন নম্বর সম্পর্কিত ভৌগলিক তথ্য সরবরাহ করে।

উদাহরণ

ফোন নম্বর বৈধতার সবচেয়ে বড় সমস্যা হ'ল এটি খুব সাংস্কৃতিকভাবে নির্ভর।

  • আমেরিকা
    • (408) 974–2042একটি বৈধ মার্কিন নম্বর
    • (999) 974–2042হয় একটি বৈধ নয় মার্কিন সংখ্যা
  • অস্ট্রেলিয়া
    • 0404 999 999একটি বৈধ অস্ট্রেলিয়ান নম্বর
    • (02) 9999 9999এছাড়াও একটি বৈধ অস্ট্রেলিয়ান নম্বর
    • (09) 9999 9999হয় একটি বৈধ নয় অস্ট্রেলিয়ান সংখ্যা

ফোন নম্বরটির ফর্ম্যাটটি পরীক্ষা করার জন্য একটি নিয়মিত অভিব্যক্তি ঠিক আছে তবে এটি কোনও ফোন নম্বরটির বৈধতা পরীক্ষা করতে সক্ষম হবে না ।

আমি আপনার ফোন নম্বরটির বিপরীতে পরীক্ষা করার জন্য এবং গুগলের মতো একটি গ্রন্থাগার libphonenumber(গিটহাব প্রকল্পের লিঙ্ক) ব্যবহার করার জন্য একটি সাধারণ নিয়মিত অভিব্যক্তি এড়িয়ে যাওয়ার পরামর্শ দেব ।

লাইবফোনেম্বরের পরিচয়!

আপনার আরও জটিল উদাহরণগুলির একটি ব্যবহার করে 1-234-567-8901 x1234, আপনি নিম্নলিখিত ডেটাগুলি libphonenumber(অনলাইন ডেমোতে লিঙ্ক করুন) পান :

Validation Results

Result from isPossibleNumber()  true
Result from isValidNumber()     true

Formatting Results:

E164 format                    +12345678901
Original format                (234) 567-8901 ext. 123
National format                (234) 567-8901 ext. 123
International format           +1 234-567-8901 ext. 123
Out-of-country format from US  1 (234) 567-8901 ext. 123
Out-of-country format from CH  00 1 234-567-8901 ext. 123

সুতরাং আপনি কেবল ফোন নম্বরটি বৈধ কিনা তা শিখেন না (এটি যা) তবে আপনি নিজের লোকালে ধারাবাহিক ফোন নম্বর ফর্ম্যাটিংও পান।

বোনাস হিসাবে libphonenumber, ফোন নম্বরগুলির বৈধতা যাচাই করার জন্য অনেকগুলি ডেটাসেট রয়েছে, সুতরাং বিন্যাসের সাথে বৈধ সংখ্যা হিসাবে +61299999999(আন্তর্জাতিক সংস্করণ (02) 9999 9999) রিটার্নের মতো একটি নম্বর পরীক্ষা করা:

Validation Results

Result from isPossibleNumber()  true
Result from isValidNumber()     true

Formatting Results

E164 format                    +61299999999
Original format                61 2 9999 9999
National format                (02) 9999 9999
International format           +61 2 9999 9999
Out-of-country format from US  011 61 2 9999 9999
Out-of-country format from CH  00 61 2 9999 9999

লাইফফোনেম্বার আপনাকে অনেকগুলি অতিরিক্ত সুবিধা দেয় যেমন ফোন নম্বরটি সনাক্ত করা অবস্থানটি দখল করা এবং ফোন নম্বর থেকে সময় অঞ্চল সম্পর্কিত তথ্য পাওয়া:

PhoneNumberOfflineGeocoder Results
Location        Australia

PhoneNumberToTimeZonesMapper Results
Time zone(s)    [Australia/Sydney]

তবে অবৈধ অস্ট্রেলিয়ান ফোন নম্বর ( (09) 9999 9999) এটি বৈধ ফোন নম্বর নয় returns

Validation Results

Result from isPossibleNumber()  true
Result from isValidNumber()     false

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

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


বুঝেই এছাড়াও যান বন্দর এখন বলেও কিছু নেই; github.com/ttacon/libphonenumber
michaelhanson

এটি কোনও সম্ভাব্য নম্বর কিনা তা যাচাই করার সময় আপনার কোনও দেশের কোড নির্দিষ্ট করার দরকার নেই? আমি পিএইচপি সংস্করণ ব্যবহার করছি এবং যদি আমি কোনও ব্রিটিশ নম্বর লিখি (0 এর সাথে বাস্তব সংখ্যার সাথে প্রতিস্থাপন 07700000000করি ) তবে আমি Missing or invalid default region.ত্রুটি পাই get তবে আমি যদি দেশের কোড উল্লেখ করি তবে এটি পাস হবে।
BugHunterUK

এফওয়াইআই: এই গ্রন্থাগারটি কিছু দেশকে সমর্থন করে না, phpinterviewquestions.co.in/blog/ionic/…
সিজো বিজয়ন

1
@ বাগহান্টরুক (এবং যে কেউ এই প্রশ্নটি দেখে এবং একই বিস্মিত হওয়া) কোনও সংখ্যাকে পার্স করার সময় আপনি প্রত্যাশিত অঞ্চলটি নির্দিষ্ট করতে পারেন এবং পাঠাগারটি সেই অঞ্চলে অ-আন্তর্জাতিক সংখ্যার সন্ধান করবে। যদি আপনি উল্লেখ না করেন তবে এটি বৈধ আন্তর্জাতিক ফর্ম্যাটে কিছু না প্রত্যাখ্যান করবে।
আইএমএসওপি

Github.com/nyaruka/phonenumbers বিবেচনা করুন কারণ এটি লিফফোনেম্বরের পরিবর্তে গুগলের দ্বারা প্রস্তাবিত "অফিসিয়াল" গো প্যাকেজ হয়ে গেছে।
ডিজোন

78

/^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d?)\)?)?[\-\.\ \\\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\\/]?){0,})(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$/i

এটি মেলে:

 - (+351) 282 43 50 50
 - 90191919908
 - 555-8909
 - 001 6867684
 - 001 6867684x1
 - 1 (234) 567-8901
 - 1-234-567-8901 x1234
 - 1-234-567-8901 ext1234
 - 1-234 567.89/01 ext.1234
 - 1(234)5678901x1234
 - (123)8575973
 - (0055)(123)8575973

$ N এ, এটি সংরক্ষণ করে:

  1. দেশ সূচক
  2. ফোন নম্বর
  3. প্রসার

আপনি এটি https://www.regexpal.com/?fam=99127 এ পরীক্ষা করতে পারেন


এটি আমি দেখেছি সবচেয়ে ব্যাপক রেজেেক্স ge এটা তোলে যতক্ষণ না আপনি সরাতে কাছাকাছি পেতে সহজ ^এবং $অন্য অথবা আমি ব্যবহার করে এটি কাছাকাছি পেতে সক্ষম নই [111] [111] [1111]বা 111--111--1111কথা বলা ইত্যাদি। (দুঃখিত, আমার শেষ মন্তব্য মুছে ফেলা হয়েছে)
বাফরোমকা

আপনি কি আবার বাক্যাংশ বলতে পারেন? আমি এটি বুঝতে পারি না: "আপনি ^ এবং remove অপসারণ না করা অবধি সহজ হয়ে উঠতে পারবেন বা অন্যথায় আমি [111] [111] [1111]" ব্যবহার করে এটি ঘিরে রাখতে সক্ষম হয়েছি। আপনি যখন এবং এটি গ্রহণ করবেন তখন এর অর্থ কি এটি [[111] [111] [1111] 'যাচাই ^করে $?
ইসমাইল মিগুয়েল

আমি তোমার Regex ব্যবহার প্রায় পেয়েছিলাম [111] [111] [1111]এবং 111--111--1111যতক্ষণ না আমি মুছে ^এবং $Regex থেকে।
বাফ্রোমকা

11
Comment মন্তব্য থ্রেডগুলিতে চ্যাট করতে যাওয়া উচিত নয় কেন এটির একটি দুর্দান্ত উদাহরণ। আমি এই কথোপকথনটি কীভাবে পরিণত হয়েছিল তাতে আমি খুব আগ্রহী এবং আমার অ্যাপে ব্যবহার করার জন্য এই রেজিএক্স যথেষ্ট দৃ is় কিনা তা জানতে হবে। দুর্ভাগ্যক্রমে, আড্ডার কথোপকথনটি এখন শেষ হয়ে গেছে।
ম্যাট ক্যাস্যাট

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

63

যদিও সমস্ত শ্বেতক্ষেত্রের স্ট্রিপের উত্তরটি ঝরঝরে, এটি প্রকৃতপক্ষে উত্থিত সমস্যাটি সমাধান করে না, যা একটি রেজেক্স সন্ধান করা। উদাহরণস্বরূপ, আমার পরীক্ষা স্ক্রিপ্টটি ধরুন যা একটি ওয়েব পৃষ্ঠা ডাউনলোড করে এবং রেজেক্স ব্যবহার করে সমস্ত ফোন নম্বর বের করে। যেহেতু আপনার যেহেতু একটি রেইজেক্সের দরকার ছিল, তাই আপনার কাছেও রেগেক্স সমস্ত কাজ করতে পারে। আমি এটি নিয়ে এসেছি:

1?\W*([2-9][0-8][0-9])\W*([2-9][0-9]{2})\W*([0-9]{4})(\se?x?t?(\d*))?

এটি পরীক্ষা করার জন্য এখানে পার্ল স্ক্রিপ্ট। আপনি মিলে গেলে, $ 1 এ ফোন কোড থাকে, $ 2 এবং $ 3 ফোন নম্বর থাকে এবং $ 5 এ এক্সটেনশন থাকে। আমার পরীক্ষার স্ক্রিপ্ট ইন্টারনেট থেকে একটি ফাইল ডাউনলোড করে এবং এতে সমস্ত ফোন নম্বর মুদ্রণ করে।

#!/usr/bin/perl

my $us_phone_regex =
        '1?\W*([2-9][0-8][0-9])\W*([2-9][0-9]{2})\W*([0-9]{4})(\se?x?t?(\d*))?';


my @tests =
(
"1-234-567-8901",
"1-234-567-8901 x1234",
"1-234-567-8901 ext1234",
"1 (234) 567-8901",
"1.234.567.8901",
"1/234/567/8901",
"12345678901",
"not a phone number"
);

foreach my $num (@tests)
{
        if( $num =~ m/$us_phone_regex/ )
        {
                print "match [$1-$2-$3]\n" if not defined $4;
                print "match [$1-$2-$3 $5]\n" if defined $4;
        }
        else
        {
                print "no match [$num]\n";
        }
}

#
# Extract all phone numbers from an arbitrary file.
#
my $external_filename =
        'http://web.textfiles.com/ezines/PHREAKSANDGEEKS/PnG-spring05.txt';
my @external_file = `curl $external_filename`;
foreach my $line (@external_file)
{
        if( $line =~ m/$us_phone_regex/ )
        {
                print "match $1 $2 $3\n";
        }
}

সম্পাদনা:

এটিকে কিছুটা শক্ত করার জন্য আপনি রেজেক্সে \ W * থেকে \ s * \ W?। S * এ পরিবর্তন করতে পারেন। আমি যখন লিখি তখন কোনও ফর্মের মধ্যে ইউজার ইনপুটকে বৈধতা দিয়ে বলি, বলার ক্ষেত্রে আমি রেজেক্সের কথা ভাবছিলাম না, তবে এই পরিবর্তনটি সেই উদ্দেশ্যেই রেজেক্সটি ব্যবহার সম্ভব করে তোলে।

'1?\s*\W?\s*([2-9][0-8][0-9])\s*\W?\s*([2-9][0-9]{2})\s*\W?\s*([0-9]{4})(\se?x?t?(\d*))?';

2
এফওয়াইআইয়ের রেজেক্সটিও মেলে: (4570457-6789এটি একটি সাধারণ সাধারণ টাইপ হবে। ম্যাচ গ্রুপগুলিও স্কিউড হয়: রুবুলার.com
r

@ সুডেসুনে প্রিপেনডিং (^|[^\d\n])( মাল্টিলাইন ফ্ল্যাগ লাগানো ) সাধারণ সমস্যা এড়িয়ে চলেছে, তা নিশ্চিত করে এটি সংখ্যাসূচক কিছু দ্বারা তাত্ক্ষণিকভাবে পূর্ববর্তী নয়।
বটাউন

দ্রষ্টব্য যে এটি উত্তর আমেরিকা কেন্দ্রিক - এটি "44 7911 123456" মিস করে
বেন হুইলার

43

আমি এই থ্রেডের উত্তর হিসাবে আমার উত্তরও অন্তর্ভুক্ত করার সিদ্ধান্ত নেওয়ার আগে আমি অন্য এসও প্রশ্নের এই প্রশ্নের উত্তর দিয়েছিলাম, কারণ কেউ কেবল কীভাবে আইটেমগুলির প্রয়োজন / প্রয়োজন হবে না তা সম্বোধন করছিল না, কেবল রেজেক্সগুলি হস্তান্তর করল: রেজেক্স ভুল কাজ করছে, অপ্রত্যাশিত জিনিসগুলির সাথে মিলে যায়

সেই সাইটে আমার পোস্ট থেকে, আমি কাউকে তাদের নিজস্ব পছন্দসই ফোন নম্বর ফর্ম্যাটের জন্য তাদের নিজস্ব রেজেক্স তৈরি করতে সহায়তা করার জন্য একটি দ্রুত গাইড তৈরি করেছি, যা আমি সতর্ক করব (যেমন আমি অন্য সাইটে করেছি) যদি আপনি খুব সীমাবদ্ধ থাকেন তবে, আপনি পছন্দসই ফলাফলগুলি নাও পেতে পারেন এবং বিশ্বের সমস্ত সম্ভাব্য ফোন নম্বর গ্রহণ করার কোনও "এক আকার সবই ফিট করে" সমাধান নেই - কেবলমাত্র আপনি নিজের পছন্দ মতো ফর্ম্যাট হিসাবে গ্রহণ করার সিদ্ধান্ত গ্রহণ করেন। আপনার নিজের ঝুঁকিতে ব্যবহার করুন।

দ্রুত ঠকানো শীট

  • অভিব্যক্তি শুরু করুন: /^
  • যদি আপনার কোনও স্থান প্রয়োজন হয় তবে: [\s]বা ব্যবহার করুন \s
  • যদি আপনার প্রথম বন্ধনী প্রয়োজন হয় তবে ব্যবহার করুন: [(]এবং [)]। ব্যবহার করা \(এবং \)কুশ্রী এবং জিনিস গুলিয়ে ফেলতে পারে।
  • আপনি যদি কোনও কিছু alচ্ছিক হতে চান তবে তার ?পরে একটি পদক্ষেপ দিন
  • আপনি যদি হাইফেন চান তবে কেবল টাইপ করুন -বা [-]। আপনি যদি এটি অন্য অক্ষরের একটি সিরিজে প্রথম বা শেষ না রাখেন তবে আপনাকে এড়িয়ে যাওয়ার প্রয়োজন হতে পারে: \-
  • আপনি যদি স্লটে বিভিন্ন পছন্দ গ্রহণ করতে চান তবে বিকল্পগুলির চারপাশে বন্ধনী রাখুন: [-.\s]একটি হাইফেন, সময়কাল বা স্থান প্রয়োজন হবে require শেষ বন্ধনীটির পরে একটি প্রশ্ন চিহ্ন those সমস্ত স্লটের জন্য alচ্ছিক করে তুলবে।
  • \d{3}: একটি 3-সংখ্যার নম্বর প্রয়োজন: 000-999। শর্টহ্যান্ডের জন্য [0-9][0-9][0-9]
  • [2-9] : সেই স্লটের জন্য 2-9 অঙ্কের প্রয়োজন।
  • (\+|1\s)?: একটি "প্লাস" বা একটি 1 এবং একটি স্থান (পাইপের অক্ষর |, এটি "বা") গ্রহণ করুন এবং এটি optionচ্ছিক করুন। "প্লাস" চিহ্নটি এড়াতে হবে।
  • আপনি যদি একটি স্লটের সাথে মেলানোর জন্য নির্দিষ্ট নম্বর চান তবে এগুলি লিখুন: [246]একটি 2, 4 বা 6 [77|78]লাগবে 77 77 বা 78 78 লাগবে।
  • $/ : এক্সপ্রেশন শেষ

1
এটি খুব দরকারী, তবে আমি সন্দেহ করছি এবং একটি {মিনিট, সর্বোচ্চ} এক্সপ্রেশনটি খুঁজছি। তুমি কি সাহায্য করতে পারো?
আতাবয় জোসেফ

যদি এটি আমরা যে সিঙ্গেল ডিজিটের কথা বলছি (এবং আপনি এটির সাথে এটি মিলিয়ে ফেলতে পারেন) তবে [2-9]আমি যে ব্লকটি রেখেছি তা দেখুন । তার অর্থ আপনার মিনিট 2, এবং আপনার সর্বোচ্চ 9 হয় according সেই অনুসারে সামঞ্জস্য করুন।
vapcguy

30

আমি সরলতম লিখেছি (যদিও এতে আমার বিন্দুর দরকার ছিল না)।

^ ([0-9 \ (\) \ / \ + \ -] *) $

নীচে উল্লিখিত হিসাবে, এটি কেবল অক্ষরগুলির জন্য পরীক্ষা করে, এর গঠন / ক্রম নয়


38
এটি প্রযুক্তিগতভাবে অবৈধ এমন সংখ্যক সংখ্যাকে বৈধতা দেয়। যেমন, "- + () () ()) ()))"। নিয়মিত এক্সপ্রেশন পড়তে শিখুন যাতে আপনি কী করছেন তা বুঝতে পারবেন।
স্টিভেন সোরোকা

3
@ স্টিভেনসোরোকা প্রযুক্তিগতভাবে এটি প্রচুর অবৈধ কেসগুলিকে মঞ্জুরি দিতে পারে, তবে আমরা যখন সহজ সমাধানের সহজ সমাধান দিয়ে সাধারণ ভুলগুলি এড়াতে কেবল ব্যবহারকারীকে সাহায্য করার বিষয়ে চিন্তা করি, তখন যাওয়ার
উপায়টি

2
এটি সাদা জায়গার সাথে খালি লাইনের সাথেও মিলছে
ওয়াসিম এ।

1
@HappyHardik। প্রকৃতপক্ষে. সাধারণ ও শক্তিশালী, মৌলিক বৈধতার জন্য ব্যবহারকারীকে একাধিক বিন্দু, ড্যাশ, বন্ধনী বা প্লাস টাইপ করতে দিন।
ডিজিজিজি

এটি কেবল ব্যবহৃত হয়েছে এবং এটি অনেক দিক থেকে ভুল। উদাহরণস্বরূপ, একটি ইউকে ফোন নম্বর +44 দিয়ে শুরু হতে পারে, বা একটি ফোন নুবারের মধ্যে (0) থাকতে পারে। তবে আপনার নিয়মিত অভিব্যক্তি অনুযায়ী এটি বৈধ নয়। আমি @ ইসমাইল মিগুয়েলের উত্তরটি সুপারিশ করব। এটি ঠিক কাজ করে এবং আমি আপনাকে আপনার উত্তরটি সংশোধন করার পরামর্শ দিচ্ছি।
স্টিলিও ভোসকোস

22

যদি আপনি কেবল যাচাই করতে চান তবে আপনার মাঠে এলোমেলো আবর্জনা নেই (যেমন, ফর্ম স্প্যামারগুলি থেকে) এই রেজেক্সটি সুন্দরভাবে করা উচিত:

^[0-9+\(\)#\.\s\/ext-]+$

নোট করুন যে এটির কতগুলি সংখ্যা, বা কোন সংখ্যাটি সেই অঙ্কগুলিতে বৈধ আছে তার কোনও বিশেষ বিধি নেই, এটি কেবল যাচাই করে যে কেবলমাত্র অঙ্ক, প্রথম বন্ধনী, ড্যাশ, যোগ, স্থান, পাউন্ড, নক্ষত্র, সময়কাল, কমা বা অক্ষরগুলি রয়েছে e, x, tউপস্থিত থাকে।

এটি আন্তর্জাতিক সংখ্যা এবং স্থানীয়করণ ফর্ম্যাটগুলির সাথে সামঞ্জস্যপূর্ণ হওয়া উচিত। আপনি কি কিছু অঞ্চলের জন্য বর্গক্ষেত্র, কোঁকড়ানো বা কৌণিক বন্ধনীগুলির অনুমতি দেওয়ার কোন প্রয়োজনের পূর্বেই জানেন? (বর্তমানে তারা অন্তর্ভুক্ত নেই)।

আপনি যদি প্রতি ডিজিটের নিয়মগুলি বজায় রাখতে চান (যেমন ইউএস এরিয়া কোডস এবং প্রিফিক্সগুলিতে (এক্সচেঞ্জ কোডগুলি অবশ্যই 200-999 এর মধ্যে হতে হবে) ভাল, আপনার জন্য শুভকামনা। ভবিষ্যতের যে কোনও মুহুর্তে বিশ্বের যে কোনও দেশ পুরানো হতে পারে এমন একটি জটিল নিয়ম-সেট বজায় রাখা মজাদার মনে হয় না।

এবং সমস্ত / সর্বাধিক অ-সংখ্যাযুক্ত অক্ষরগুলি সরানোর সময় সার্ভার সাইডে ভাল কাজ করতে পারে (বিশেষত যদি আপনি এই মানগুলি একটি ডায়ালারের কাছে দেওয়ার পরিকল্পনা করছেন), আপনি বৈধতার সময় ব্যবহারকারীর ইনপুটটি ছিন্ন করতে নাও চান, বিশেষত যদি আপনি এটি চান অন্য ক্ষেত্রে সংশোধন করুন।


22

নোট করুন যে স্ট্রিপিং ()অক্ষরগুলি ইউকে নম্বর লিখার শৈলীর জন্য কার্যকর হয় না +44 (0) 1234 567890যা সাধারণ: যেটি আন্তর্জাতিক নাম্বার ডায়াল করে:
+441234567890
বা ইউকে ডায়ালে01234567890


15

আপনি RegExLib দেখুন ?

মার্কিন ফোন নম্বর প্রবেশ করানো সম্ভাবনার একটি তালিকা আবার ফিরিয়ে এনেছে।


3
এটি আপনার কোডটিতে অস্পষ্ট বাগগুলি একীভূত করার দুর্দান্ত উপায় বলে মনে হচ্ছে।
টম লর্ড

12

একটি বাধাবিরোধী পুনরায় জোটে আমার প্রচেষ্টা:

/^[+#*\(\)\[\]]*([0-9][ ext+-pw#*\(\)\[\]]*){6,45}$/

স্বীকার করে:

+(01) 123 (456) 789 ext555
123456
*44 123-456-789 [321]
123456
123456789012345678901234567890123456789012345
*****++[](][((( 123456tteexxttppww

প্রত্যাখ্যান:

mob 07777 777777
1234 567 890 after 5pm
john smith
(empty)
1234567890123456789012345678901234567890123456
911

এটি প্রদর্শনের জন্য এটি স্যানিটাইজ করা আপনার উপর নির্ভর করে। বৈধতা দেওয়ার পরে এটি একটি সংখ্যা হতে পারে।


12

আমি এটি বেশ ভাল কাজ খুঁজে পেয়েছি:

^\(*\+*[1-9]{0,3}\)*-*[1-9]{0,3}[-. /]*\(*[2-9]\d{2}\)*[-. /]*\d{3}[-. /]*\d{4} *e*x*t*\.* *\d{0,4}$

এটি এই সংখ্যা বিন্যাসের জন্য কাজ করে:

1-234-567-8901
1-234-567-8901 x1234
1-234-567-8901 ext1234
1 (234) 567-8901
1.234.567.8901
1/234/567/8901
12345678901
1-234-567-8901 ext. 1234
(+351) 282 433 5050

নিশ্চিত করার জন্য গ্লোবাল এবং মাল্টলাইন পতাকা ব্যবহার করার বিষয়টি নিশ্চিত করুন।

লিঙ্ক: http://www.regexr.com/3bp4b


11

আপনি যদি ফর্মের বৈধতা সম্পর্কে কথা বলছেন তবে বিভিন্ন দেশ এবং সরবরাহকারীর মানগুলির কারণে সঠিক অর্থের পাশাপাশি সঠিক ডেটা বৈধ করার জন্য রেজিএক্সপ্যাক্স অত্যন্ত জটিল হতে চলেছে। এটি আপ টু ডেট রাখাও কঠিন হবে।

আমি প্রশ্নটি মূলত বৈধ প্যাটার্নের সন্ধান হিসাবে ব্যাখ্যা করি, যা অভ্যন্তরীণভাবে সামঞ্জস্যপূর্ণ নাও হতে পারে - উদাহরণস্বরূপ একটি সংখ্যার বৈধ সেট থাকা, তবে ট্রাঙ্ক-লাইন, এক্সচেঞ্জ ইত্যাদি দেশ কোড উপসর্গের বৈধ প্যাটার্নে যাচাই করা নয় ।

উত্তর আমেরিকা সোজা, এবং আন্তর্জাতিকের জন্য আমি একটি 'আইডিয়োমেটিক' প্যাটার্ন ব্যবহার করতে পছন্দ করি যা লোকেরা তাদের সংখ্যা নির্দিষ্ট করে এবং মনে রাখার উপায়গুলি জুড়ে:

^((((\(\d{3}\))|(\d{3}-))\d{3}-\d{4})|(\+?\d{2}((-| )\d{1,8}){1,5}))(( x| ext)\d{1,5}){0,1}$

উত্তর আমেরিকান প্যাটার্নটি নিশ্চিত করে যে যদি একটি প্রথম বন্ধনী অন্তর্ভুক্ত করা হয় তবে তা উভয়ই। Accountsচ্ছিক প্রাথমিক '+' এবং দেশ কোডের জন্য আন্তর্জাতিক অ্যাকাউন্টগুলি। তারপরে, আপনি প্রতিভাতে রয়েছেন। বৈধ ম্যাচগুলি হ'ল:

  • (xxx)xxx-xxxx
  • (xxx)-xxx-xxxx
  • (xxx)xxx-xxxx x123
  • 12 1234 123 1 x1111
  • 12 12 12 12 12
  • 12 1 1234 123456 x12345
  • +12 1234 1234
  • +12 12 12 1234
  • +12 1234 5678
  • +12 12345678

এটি আমার পক্ষপাতদুষ্ট হতে পারে কারণ আমার অভিজ্ঞতা উত্তর আমেরিকা, ইউরোপ এবং এশিয়ার একটি সামান্য অংশে সীমাবদ্ধ।


আমি আমার জাভাস্ক্রিপ্ট বৈধকরণ স্ক্রিপ্টে উপরেরটি প্রয়োগ করার চেষ্টা করছি তবে আমি একটি invalid quantifierত্রুটি পেয়ে চলেছি । আমি কী ভুল করছি সে সম্পর্কে কোনও ধারণা?
জান্নিস

আমি তুচ্ছ ঘটনাটি যুক্ত করব যেখানে ফোনটি প্রতীক ছাড়াই নির্দিষ্ট করা হয়েছে তবে ইউরোপের স্থানীয় এবং মোবাইল নম্বরগুলির জন্য সাধারণত স্পেস এবং দেশ কোডটি নির্দিষ্ট করা হয়েছে: 676412342, 676 46 32 12, 676 463 212
রুপস

11

এখানে একটি দুর্দান্ত প্যাটার্ন যা আমার অর্জনের জন্য প্রয়োজনীয়তার সাথে সর্বাধিক ঘনিষ্ঠভাবে মেলে। আমি মূল লেখক নই, তবে আমি মনে করি এটি ভাগ করে নেওয়া ভাল কারণ আমি এই সমস্যাটি খুব জটিল এবং সংক্ষিপ্ত বা ব্যাপকভাবে দরকারী উত্তর ছাড়াই পেয়েছি।

নিম্নোক্ত রেজেক্স বিভিন্ন গ্লোবাল ফোন নম্বর ফর্ম্যাটে বহুল ব্যবহৃত নম্বর এবং চরিত্রের সংমিশ্রণগুলি ধরবে:

/^\s*(?:\+?(\d{1,3}))?([-. (]*(\d{3})[-. )]*)?((\d{3})[-. ]*(\d{2,4})(?:[-.x ]*(\d+))?)\s*$/gm

ইতিবাচক:
+42 555.123.4567
+ 1- (800) -123-4567
+7 555 1234567
+7 (926) 1234567
(926) 1234567
+79261234567
926 1234567
9261234567
1234567
123-4567
123-89-01
495 1234567
469 123 45 67
89261234567
8 (926) 1234567
926.123.4567
415-555-1234
650-555-2345
(416)555-3456
202 555 4567
4035555678
1 416 555 9292

নেতিবাচক:
926 3 4
8 800 600-অ্যাপল

আসল উত্স: http://www.regexr.com/38pvb


এটি এক্সটেনশনের জন্য কিছু সীমিত সমর্থন রয়েছে। এটি "616-555-1234 x567" এর সাথে মেলে তবে "616-555-1234 এক্সট্রা 567" নয়।
জন স্নাইডার

2
উদাহরণস্বরূপ "------- ((((55555555" বা "99999999999999999999999"
মাইকেপ 11

এটি নাইটারল্যান্ড ম্যাকডোনাল্ডস নম্বরে +31 76 596 4192 (আমি কেবল এলোমেলো সংখ্যার জন্য পরীক্ষা
করছিলাম

10

আমার অন্ত্র অনুভূতি এই বিষয়টির জবাবের পরিমাণ দ্বারা আরও দৃfor় হয় - যে এই সমস্যাটির কার্যত অসীম সমাধান রয়েছে, যার মধ্যে কোনও মার্জিত হতে পারে না।

সত্যি বলতে, আমি আপনাকে সুপারিশ করব যে আপনি ফোন নম্বরগুলি বৈধ করার চেষ্টা করবেন না। এমনকি যদি আপনি একটি বড়, লোমযুক্ত যাচাইকারী লিখতে পারেন যা সমস্ত বিভিন্ন বৈধ ফর্ম্যাটকে অনুমতি দেয় তবে এটি এমনকি শেষ পর্যন্ত কোনও ফোন নম্বর সাদৃশ্যযুক্ত বেশ কিছু কিছু করার অনুমতি দেয়।

আমার মতে, সবচেয়ে মার্জিত সমাধান হ'ল ন্যূনতম দৈর্ঘ্য যাচাই করা, এর চেয়ে বেশি কিছু নয়।


এর মধ্যে অনেকগুলি চেষ্টা করার পরে এবং বিদ্যমান ডেটা এবং ব্যবহারকারীদের প্রতিক্রিয়াগুলি যাবার পরে আমি সম্মত হতে চাই ...
ক্রিস্টোফার কিং

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

10

এটি ফিলিপাইন মোবাইল ফোন নম্বরগুলির জন্য একটি সাধারণ নিয়মিত এক্সপ্রেশন প্যাটার্ন:

((\+[0-9]{2})|0)[.\- ]?9[0-9]{2}[.\- ]?[0-9]{3}[.\- ]?[0-9]{4}

অথবা

((\+63)|0)[.\- ]?9[0-9]{2}[.\- ]?[0-9]{3}[.\- ]?[0-9]{4}

এগুলি মিলবে:

+63.917.123.4567  
+63-917-123-4567  
+63 917 123 4567  
+639171234567  
09171234567  

প্রথমটি কোনও দুটি অঙ্কের দেশীয় কোডের সাথে মিলবে, এবং দ্বিতীয়টি ফিলিপাইনের দেশ কোডের সাথে একচেটিয়াভাবে মিলবে।

এটি এখানে পরীক্ষা করুন: http://refiddle.com/1ox


ধন্যবাদ। 028231234 এর মতো অঞ্চল কোড সহ ল্যান্ডলাইন নম্বরগুলি সম্পর্কে কীভাবে? আমি ভাবছি যদি অঞ্চল কোডগুলি কেবল ২-৩ ডিজিটের সংখ্যা হয় এবং সেগুলি কি সর্বদা 0 এর আগে হয়?
ঝড়

9

এখানে এখন পর্যন্ত আমার সেরা চেষ্টা। এটি উপরের ফর্ম্যাটগুলি পরিচালনা করে তবে আমি নিশ্চিত যে আমি কিছু অন্যান্য সম্ভাব্য ফর্ম্যাটগুলি অনুপস্থিত।

^\d?(?:(?:[\+]?(?:[\d]{1,3}(?:[ ]+|[\-.])))?[(]?(?:[\d]{3})[\-/)]?(?:[ ]+)?)?(?:[a-zA-Z2-9][a-zA-Z0-9 \-.]{6,})(?:(?:[ ]+|[xX]|(i:ext[\.]?)){1,2}(?:[\d]{1,5}))?$

9

আপনার একক / সরল রেইজেক্সের সাথে আন্তর্জাতিক সংখ্যাগুলি মোকাবেলা করতে বেশ কষ্ট হবে, আন্তর্জাতিক (এবং এমনকি উত্তর আমেরিকান) ফোন নম্বরগুলির অসুবিধা সম্পর্কে এই পোস্টটি দেখুন ।

দেশের কোডটি কী তা নির্ধারণ করার জন্য আপনি প্রথম কয়েকটি অঙ্ককে পার্স করতে চান, তারপরে দেশের ভিত্তিতে ভিন্নভাবে কাজ করুন।

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

আপনি সঠিকভাবে সনাক্ত করেছেন যে এটি একটি জটিল সমস্যা ...

-Adam


প্রস্তাবিত সমাধান নয়। এটা সম্ভব. কেবল এটি জটিল এবং জটিলতার অর্থ এই নয় যে আপনার নিজের হাতটি কেবল উপরে ফেলে দেওয়া উচিত।
এরিক হোডনস্কি

7

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

আমি সম্প্রতি একটি ক্লায়েন্ট প্রকল্পের জন্য যা ব্যবহার করেছি তা এখানে, যেখানে আমাদের যে কোনও ফর্ম্যাটে সমস্ত ফোন নম্বর টেল: লিঙ্কগুলিতে রূপান্তর করতে হয়েছিল।

এখনও অবধি, তারা এতে ফেলে দেওয়া সমস্ত কিছু নিয়ে কাজ করছে, তবে ত্রুটি যদি সামনে আসে তবে আমি এই উত্তরটি আপডেট করব।

Regex:

/(\+*\d{1,})*([ |\(])*(\d{3})[^\d]*(\d{3})[^\d]*(\d{4})/

সমস্ত ফোন নম্বর টেল সহ প্রতিস্থাপন করতে পিএইচপি ফাংশন: লিঙ্কগুলি (যদি কেউ আগ্রহী হন তবে):

function phoneToTel($number) {
    $return = preg_replace('/(\+*\d{1,})*([ |\(])*(\d{3})[^\d]*(\d{3})[^\d]*(\d{4})/', '<a href="tel:$1$3$4$5">$1 ($3) $4-$5</a>', $number); // includes international
    return $return;
}

এই নিয়মিত অভিব্যক্তি মেলে +1 1234562222222222222222222222
ভারদা এলেন্ত্রি

শুধু ফিরে আসবে না কেন?
21

"9999999999999999999999999999999999999999999"
বেন হুইলার

6

আমি বিশ্বাস করি যে নম্বর :: ফোন :: মার্কিন যুক্তরাষ্ট্র এবং রেজিএক্সএক্স :: প্রচলিত (বিশেষত রেজিপ্স্পের উত্স :: সাধারণ :: ইউআরআই :: আরএফসি ২৮০6 ) পার্ল মডিউলগুলি সহায়তা করতে পারে।

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

ইমেল ঠিকানাগুলি যাচাইকরণের মতো, আপনার বৈধ ফলাফল থাকলেও আপনি এটি চেষ্টা না করা পর্যন্ত এটি কারও কাছে নির্ধারিত কিনা তা আপনি জানতে পারবেন না।

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


আমি এখানে একটি অঙ্গ নেভিগেশন বাইরে যাব এবং বলব যে 911 ফোন নম্বর হিসাবে অনুমতি দেওয়া সম্ভবত এই রেজেক্সের প্রায় সমস্ত অ্যাপ্লিকেশনগুলিতে একটি খারাপ ধারণা। ভাল ধরা যদিও।
নিকোলাস ফ্লাইন্ট

4

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

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


ভ্যালিডেশন? 123% $) *% () $ * () # 456 * () * $ # (* ( # $ @ 8908 আপনার প্রস্তাবিত সমাধান মেলে যাবে।
PlexQ

1
@ প্ল্লেজকিউ 555-123-1234, 07777777777, 90210, 01/01/1901 - ব্যবহারকারীরা বৈধতার মাধ্যমে আবর্জনা ছড়িয়ে দেওয়ার ক্ষেত্রে উদ্ভাবক। অতিরিক্ত বাধাজনক বৈধতা ব্যবহার করে এবং সেগুলি ভুল বলে তাদের সত্য করে যাঁদের কাছে সত্যিকার অর্থে কিছু অদ্ভুত ডেটা থাকে সেগুলি না টিকাই ভাল।
রিঅ্যাকটিভরভেন

4

অক্ষর অক্ষরগুলির প্রতিস্থাপন করুন, তারপরে ফোনের বৈধতার জন্য বাকীটি যাচাই করুন। পিএইচপি-তে,

 $replace = array( ' ', '-', '/', '(', ')', ',', '.' ); //etc; as needed
 preg_match( '/1?[0-9]{10}((ext|x)[0-9]{1,4})?/i', str_replace( $replace, '', $phone_num );

এর মতো জটিল রেজপ্লেক্স ভাঙা ঠিক তত কার্যকর, তবে আরও সহজ হতে পারে।


3

আমি এটি আকর্ষণীয় কিছু হতে পারে। আমি এটি পরীক্ষা করিনি তবে দেখে মনে হচ্ছে এটি কার্যকর হবে

<?php
/*
string validate_telephone_number (string $number, array $formats)
*/

function validate_telephone_number($number, $formats)
{
$format = trim(ereg_replace("[0-9]", "#", $number));

return (in_array($format, $formats)) ? true : false;
}

/* Usage Examples */

// List of possible formats: You can add new formats or modify the existing ones

$formats = array('###-###-####', '####-###-###',
                 '(###) ###-###', '####-####-####',
                 '##-###-####-####', '####-####', '###-###-###',
                 '#####-###-###', '##########');

$number = '08008-555-555';

if(validate_telephone_number($number, $formats))
{
echo $number.' is a valid phone number.';
}

echo "<br />";

$number = '123-555-555';

if(validate_telephone_number($number, $formats))
{
echo $number.' is a valid phone number.';
}

echo "<br />";

$number = '1800-1234-5678';

if(validate_telephone_number($number, $formats))
{
echo $number.' is a valid phone number.';
}

echo "<br />";

$number = '(800) 555-123';

if(validate_telephone_number($number, $formats))
{
echo $number.' is a valid phone number.';
}

echo "<br />";

$number = '1234567890';

if(validate_telephone_number($number, $formats))
{
echo $number.' is a valid phone number.';
}
?>

4
আপনার বার্তাটি মনে হচ্ছে যে আপনি এই কোডটি লেখেন নি। অনুগ্রহ করে কোনও উত্স উদ্ধৃত করে কিছু মনে করবেন?
অ্যালাস্টার ইরভিন


3

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

http://digitalbush.com/projects/masked-input-plugin/

এমনকি তাদের টিউটোরিয়ালে কীভাবে ফোন নম্বর ইনপুটগুলি মাস্ক করা যায় তা তারাও যায়।


3

জাভাস্ক্রিপ্টে ভাল কাজ করে এমন একটি এখানে। এটি একটি স্ট্রিংয়ে কারণ ডোজো উইজেট এটি প্রত্যাশা করেছিল।

এটি digitচ্ছিক এক্সটেনশনের সাথে একটি 10 ​​ডিজিটের উত্তর আমেরিকা এনএএনপি সংখ্যার সাথে মেলে। স্পেসস, ড্যাশ এবং পিরিয়ডস স্বীকৃত ডিলিমিটারগুলি।

"^(\\(?\\d\\d\\d\\)?)( |-|\\.)?\\d\\d\\d( |-|\\.)?\\d{4,4}(( |-|\\.)?[ext\\.]+ ?\\d+)?$"

3

আমি একই ইস্যু নিয়ে লড়াই করে যাচ্ছিলাম, আমার আবেদনটিকে ভবিষ্যতের প্রমাণ করার চেষ্টা করছিলাম, তবে এই ছেলেরা আমাকে সঠিক দিকে চালিয়েছে। আমি আসলে সংখ্যাটি নিজে কাজ করে কিনা না তা খতিয়ে দেখছি না, আমি কেবল এটি নিশ্চিত করার চেষ্টা করছি যে একটি সংখ্যা সংখ্যায় প্রবেশ করা হয়েছে যাতে তার এক্সটেনশন থাকতে পারে বা নাও থাকতে পারে।

সবচেয়ে খারাপ পরিস্থিতি যদি ব্যবহারকারীকে এক্সএমএল ফাইল থেকে একটি ফর্ম্যাটবিহীন নম্বর টানতে হয় তবে তারা এখনও ফোনটির নম্বরপ্যাডে নম্বরগুলি টাইপ করে রাখবেন 012345678x5, এটিকে সুন্দর রাখার বাস্তব কারণ নেই। এই জাতীয় RegEx আমার জন্য এরকম কিছু প্রকাশিত হবে:

\d+ ?\w{0,9} ?\d+
  • 01234467 extension 123456
  • 01234567x123456
  • 01234567890

2

আমার প্রবণতাটি হ'ল সম্মত হ'ল অ-অঙ্কগুলি কেটে ফেলা এবং যা ভাল তা কেবল গ্রহণ করা। কমপক্ষে কয়েকটি সংখ্যক উপস্থিত রয়েছে তা নিশ্চিত করার জন্য, যদিও এটি বর্ণনামূলক ফোন নম্বর "ASK-JAKE" এর মতো কিছু নিষিদ্ধ করে।

বেশ কয়েকটি সহজ পার্ল এক্সপ্রেশন হতে পারে:

@f = /(\d+)/g;
tr/0-9//dc;

অঙ্কের গোষ্ঠীগুলিকে একত্রে রাখার জন্য প্রথমটি ব্যবহার করুন, এটি ফর্ম্যাটিং ক্লুগুলি দিতে পারে। তুচ্ছভাবে সমস্ত অ-অঙ্ক টস করতে দ্বিতীয়টি ব্যবহার করুন।

এটি কি এমন উদ্বেগ যে এখানে কিছুটা বিরতি দেওয়ার প্রয়োজন হতে পারে এবং তারপরে আরও কীগুলি প্রবেশ করাতে পারে? বা 555-1212 এর মতো কিছু (বীপের জন্য অপেক্ষা করুন) 123?


2
    pattern="^[\d|\+|\(]+[\)|\d|\s|-]*[\d]$" 
    validateat="onsubmit"

অবশ্যই একটি সংখ্যার সাথে শেষ হতে হবে, (বা + বা একটি সংখ্যা দিয়ে শুরু হতে পারে এবং এতে + - (বা) থাকতে পারে


2

আইরিশ মোবাইল ফোন নম্বরগুলির সাথে অনুরূপ কিছু করতে আগ্রহী প্রত্যেকের জন্য, এটি সম্পাদন করার জন্য এখানে একটি সহজ উপায়:

http://ilovenicii.com/?p=87

পিএইচপি


<?php
$pattern = "/^(083|086|085|086|087)\d{7}$/";
$phone = "087343266";

if (preg_match($pattern,$phone)) echo "Match";
else echo "Not match";

সেই লিঙ্কটিতে একটি জিকুয়ারি সমাধানও রয়েছে।

সম্পাদনা করুন:

jQuery সমাধান:

    $(function(){
    //original field values
    var field_values = {
            //id        :  value
            'url'       : 'url',
            'yourname'  : 'yourname',
            'email'     : 'email',
            'phone'     : 'phone'
    };

        var url =$("input#url").val();
        var yourname =$("input#yourname").val();
        var email =$("input#email").val();
        var phone =$("input#phone").val();


    //inputfocus
    $('input#url').inputfocus({ value: field_values['url'] });
    $('input#yourname').inputfocus({ value: field_values['yourname'] });
    $('input#email').inputfocus({ value: field_values['email'] }); 
    $('input#phone').inputfocus({ value: field_values['phone'] });



    //reset progress bar
    $('#progress').css('width','0');
    $('#progress_text').html('0% Complete');

    //first_step
    $('form').submit(function(){ return false; });
    $('#submit_first').click(function(){
        //remove classes
        $('#first_step input').removeClass('error').removeClass('valid');

        //ckeck if inputs aren't empty
        var fields = $('#first_step input[type=text]');
        var error = 0;
        fields.each(function(){
            var value = $(this).val();
            if( value.length<12 || value==field_values[$(this).attr('id')] ) {
                $(this).addClass('error');
                $(this).effect("shake", { times:3 }, 50);

                error++;
            } else {
                $(this).addClass('valid');
            }
        });        

        if(!error) {
            if( $('#password').val() != $('#cpassword').val() ) {
                    $('#first_step input[type=password]').each(function(){
                        $(this).removeClass('valid').addClass('error');
                        $(this).effect("shake", { times:3 }, 50);
                    });

                    return false;
            } else {   
                //update progress bar
                $('#progress_text').html('33% Complete');
                $('#progress').css('width','113px');

                //slide steps
                $('#first_step').slideUp();
                $('#second_step').slideDown();     
            }               
        } else return false;
    });

    //second section
    $('#submit_second').click(function(){
        //remove classes
        $('#second_step input').removeClass('error').removeClass('valid');

        var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;  
        var fields = $('#second_step input[type=text]');
        var error = 0;
        fields.each(function(){
            var value = $(this).val();
            if( value.length<1 || value==field_values[$(this).attr('id')] || ( $(this).attr('id')=='email' && !emailPattern.test(value) ) ) {
                $(this).addClass('error');
                $(this).effect("shake", { times:3 }, 50);

                error++;
            } else {
                $(this).addClass('valid');
            }


        function validatePhone(phone) {
        var a = document.getElementById(phone).value;
        var filter = /^[0-9-+]+$/;
            if (filter.test(a)) {
                return true;
            }
            else {
                return false;
            }
        }

        $('#phone').blur(function(e) {
            if (validatePhone('txtPhone')) {
                $('#spnPhoneStatus').html('Valid');
                $('#spnPhoneStatus').css('color', 'green');
            }
            else {
                $('#spnPhoneStatus').html('Invalid');
            $('#spnPhoneStatus').css('color', 'red');
            }
        });

     });

        if(!error) {
                //update progress bar
                $('#progress_text').html('66% Complete');
                $('#progress').css('width','226px');

                //slide steps
                $('#second_step').slideUp();
                $('#fourth_step').slideDown();     
        } else return false;

    });


    $('#submit_second').click(function(){
        //update progress bar
        $('#progress_text').html('100% Complete');
        $('#progress').css('width','339px');

        //prepare the fourth step
        var fields = new Array(
            $('#url').val(),
            $('#yourname').val(),
            $('#email').val(),
            $('#phone').val()

        );
        var tr = $('#fourth_step tr');
        tr.each(function(){
            //alert( fields[$(this).index()] )
            $(this).children('td:nth-child(2)').html(fields[$(this).index()]);
        });

        //slide steps
        $('#third_step').slideUp();
        $('#fourth_step').slideDown();            
    });


    $('#submit_fourth').click(function(){

        url =$("input#url").val();
        yourname =$("input#yourname").val();
        email =$("input#email").val();
        phone =$("input#phone").val();

        //send information to server
        var dataString = 'url='+ url + '&yourname=' + yourname + '&email=' + email + '&phone=' + phone;  



        alert (dataString);//return false;  
            $.ajax({  
                type: "POST",  
                url: "http://clients.socialnetworkingsolutions.com/infobox/contact/",  
                data: "url="+url+"&yourname="+yourname+"&email="+email+'&phone=' + phone,
                cache: false,
                success: function(data) {  
                    console.log("form submitted");
                    alert("success");
                }
                });  
        return false;

   });


    //back button
    $('.back').click(function(){
        var container = $(this).parent('div'),
        previous  = container.prev();

        switch(previous.attr('id')) {
            case 'first_step' : $('#progress_text').html('0% Complete');
                  $('#progress').css('width','0px');
                       break;
            case 'second_step': $('#progress_text').html('33% Complete');
                  $('#progress').css('width','113px');
                       break;

            case 'third_step' : $('#progress_text').html('66% Complete');
                  $('#progress').css('width','226px');
                       break;

        default: break;
    }

    $(container).slideUp();
    $(previous).slideDown();
});


});

উত্স

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.