मुझे यह निर्धारित करने की आवश्यकता है कि फोन नंबर डायल करने के प्रयास से पहले वैध है या नहीं। फोन कॉल दुनिया में कहीं भी जा सकता है।
क्या नियमित अभिव्यक्ति वैध अंतरराष्ट्रीय फोन नंबर से मेल खाएगी?
मुझे यह निर्धारित करने की आवश्यकता है कि फोन नंबर डायल करने के प्रयास से पहले वैध है या नहीं। फोन कॉल दुनिया में कहीं भी जा सकता है।
क्या नियमित अभिव्यक्ति वैध अंतरराष्ट्रीय फोन नंबर से मेल खाएगी?
जवाबों:
\+(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|
2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|
4[987654310]|3[9643210]|2[70]|7|1)\d{1,14}$
एक सामान्य अंतरराष्ट्रीय फोन नंबर के मिलान के लिए सही प्रारूप है। मैंने यूएस लैंड लाइन केंद्रित अंतरराष्ट्रीय एक्सेस कोड 011 को '+' के मानक अंतरराष्ट्रीय एक्सेस कोड पहचानकर्ता के साथ बदल दिया, जिससे यह अनिवार्य हो गया। मैंने राष्ट्रीय संख्या के लिए न्यूनतम को भी कम से कम एक अंक में बदल दिया।
ध्यान दें कि यदि आप अपने मोबाइल फोन पता पुस्तिका में इस प्रारूप में नंबर दर्ज करते हैं, तो आप अपनी पता पुस्तिका में किसी भी नंबर पर सफलतापूर्वक कॉल कर सकते हैं, भले ही आप यात्रा करते हों। लैंड लाइन के लिए, उस देश के लिए अंतर्राष्ट्रीय एक्सेस कोड के साथ प्लस को बदलें, जहां से आप डायल कर रहे हैं।
ध्यान दें कि यह राष्ट्रीय संख्या योजना नियमों को ध्यान में नहीं रखता है - विशेष रूप से, यह उन स्थानों में शून्य और लोगों को अनुमति देता है जो राष्ट्रीय संख्या योजना की अनुमति नहीं दे सकते हैं और कुछ देशों (जैसे, अमेरिका) के लिए राष्ट्रीय संख्या योजना से अधिक संख्या की अनुमति देता है।
^\+((?:9[679]|8[035789]|6[789]|5[90]|42|3[578]|2[1-689])|9[0-58]|8[1246]|6[0-6]|5[1-8]|4[013-9]|3[0-469]|2[70]|7|1)(?:\W*\d){0,13}\d$
00
सामने वाले को अनुमति देने के लिए समझ में आता है । देखने के विकास और रखरखाव की दृष्टि से, मैं यह बिल्कुल ठीक सभी नंबरों को लागू करने के लिए है के साथ शुरू करने के लिए कहेंगे +
या यहाँ तक कि की जगह 00
एक साथ +
हर बार जब आप इसे पाने के - विशेष रूप से यह देखते हुए कि ज्यादातर लोगों के बारे में पता कर रहे हैं +
प्रारूप (जो सबसे अधिक अंतरराष्ट्रीय फोन इनपुट फ़ील्ड वैसे भी) की आवश्यकता है। इसके अलावा यह एक लाइनर ठीक है, और जिस तरह से अधिक पठनीय है। यह दृष्टिकोण यह भी सुनिश्चित करेगा कि सभी फ़ोन नंबर एक ही प्रारूप में हों, और आपकी मान्यता को बहुत कम त्रुटि वाला बनाता है, इस प्रकार यह पूरी बात को और अधिक बनाए रखता है।
00
संदेश का उपयोग सही तरीके से नहीं भेजेगा, जबकि शुरुआत +
हमेशा अंतरराष्ट्रीय स्तर पर काम करेगी। हम पागल हो सकते हैं और इसे सुपर कॉम्प्लेक्स बना सकते हैं, लेकिन कभी-कभी यह संभव है / हमारे जीवन को आसान बनाने के लिए कुछ बाधाओं को छोड़ने के लायक है :)
सभी देश कोड ITU द्वारा परिभाषित किए गए हैं। निम्नलिखित regex ITU-T E.164 और अनुलग्नक से ITU ऑपरेशनल बुलेटिन नंबर 930 - 15.IV.2009 पर आधारित है । इसमें सभी वर्तमान देश कोड और कोड भविष्य के उपयोग के लिए आरक्षित हैं। हालांकि इसे थोड़ा छोटा किया जा सकता है, मैंने प्रत्येक कोड को स्वतंत्र रूप से शामिल करने का फैसला किया।
यह यूएसए से आने वाली कॉल के लिए है। अन्य देशों के लिए, उस देश की डायलिंग योजना के लिए जो भी उपयुक्त हो, अंतर्राष्ट्रीय एक्सेस कोड (regex की शुरुआत में 011) को बदल दें ।
इसके अलावा, ध्यान दें कि ITU E.164 पूर्ण अंतर्राष्ट्रीय टेलीफोन नंबर की अधिकतम लंबाई को 15 अंकों तक परिभाषित करता है। इसका मतलब है कि तीन अंकों वाले देश कोड में 12 अतिरिक्त अंक और 1 अंक वाले देश कोड में 14 अतिरिक्त अंक हो सकते हैं। इसलिए
[0-9]{0,14}$
रेगेक्स का अंत।
सबसे महत्वपूर्ण बात, इस रेगेक्स का मतलब यह नहीं है कि संख्या वैध है - प्रत्येक देश अपनी आंतरिक संख्या योजना को परिभाषित करता है। यह केवल यह सुनिश्चित करता है कि देश कोड मान्य है।
283 | 282 | 281 | 280 | 269 | 268 | 267 | 266 | 265 | 264 | 263 | 262 | 261 | 260 | 259 | 258 | 257 | 256 | 255 | 254 | 253 | 252 | 251 | 250 | 249 | 248 | 247 | 246 | 245 | 244 | 243 | 242 | 241 | 240 | 239 | 238 | 237 | 236 | 235 | 234 | 233 | 232 | 231 | 230 | 229 | 228 | 227 | 226 | 225 | 224 | 223 | 222 | 221 | 220 | 219 | 218 | 217 | 216 | 215 | 214 | 213 | 212 | 211 | 210 | 98 | 95 | 94 | 93 | 92 | 91 | 90 | 86 | 84 | 82 | 81 | 66 | 65 | 64 | 63 | 62 | 61 | 60 | 58 | 57 | 56 | 55 | 54 | 53 | 52 | 51 | 49 | 48 | 47 | 46 | 45 | 44 | 43 | 41 | 40 | 39 | 36 | 34 | 33 | 32 | 31 | 30 | 27 | 20 | 7 | 1) [0-9] {0, 14} $
यह एक और अनुकूलन है।
\+(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|
2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|
4[987654310]|3[9643210]|2[70]|7|1)
\W*\d\W*\d\W*\d\W*\d\W*\d\W*\d\W*\d\W*\d\W*(\d{1,2})$
(i) मान्य अंतर्राष्ट्रीय उपसर्गों
(ii) के बाद 9 या 10 अंकों के साथ, किसी भी प्रकार या परिधि के साथ रखने की अनुमति देता है (अंतिम दो अंकों के बीच)
यह मेल खाएगा:
+ 1-234-567-8901
+ 61-234-567-89-01
+ 46-234 5678901
+1 (234) 56 89 901
+1 (234) 56-89 901
+
46.234.567.89%
+1 / 234/567/8901
आप Google से लाइब्रेरी लिबफोनेनंबर का उपयोग कर सकते हैं ।
PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
String decodedNumber = null;
PhoneNumber number;
try {
number = phoneNumberUtil.parse(encodedHeader, null);
decodedNumber = phoneNumberUtil.format(number, PhoneNumberFormat.E164);
} catch (NumberParseException e) {
e.printStackTrace();
}
मैं इस एक का उपयोग करें:
/([0-9\s\-]{7,})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$/
फायदे: + या 011 शुरुआत को पहचानता है, इसे आवश्यकतानुसार लंबे समय तक रहने देता है, और कई विस्तार सम्मेलनों को संभालता है। (#, एक्स, ext, विस्तार)
यहाँ आपके regex का "अनुकूलित" संस्करण है:
^011(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|
2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|
4[987654310]|3[9643210]|2[70]|7|1)\d{0,14}$
आप बदल सकते हैं \d
के साथ [0-9]
करता है, तो अपने रेगुलर एक्सप्रेशन से वाक्य रचना का समर्थन नहीं करता \d
।
के लिए आईओएस स्विफ्ट मैं इस उपयोगी पाया,
let phoneRegEx = "^((\\+)|(00)|(\\*)|())[0-9]{3,14}((\\#)|())$"
संशोधित @ एरिक की नियमित अभिव्यक्ति - सभी देश कोडों की एक सूची जोड़ दी (उन्हें xxxdepy @ Github से मिला है । मुझे आशा है कि आप इसे उपयोगी पाएंगे:
/(\+|00)(297|93|244|1264|358|355|376|971|54|374|1684|1268|61|43|994|257|32|229|226|880|359|973|1242|387|590|375|501|1441|591|55|1246|673|975|267|236|1|61|41|56|86|225|237|243|242|682|57|269|238|506|53|5999|61|1345|357|420|49|253|1767|45|1809|1829|1849|213|593|20|291|212|34|372|251|358|679|500|33|298|691|241|44|995|44|233|350|224|590|220|245|240|30|1473|299|502|594|1671|592|852|504|385|509|36|62|44|91|246|353|98|964|354|972|39|1876|44|962|81|76|77|254|996|855|686|1869|82|383|965|856|961|231|218|1758|423|94|266|370|352|371|853|590|212|377|373|261|960|52|692|389|223|356|95|382|976|1670|258|222|1664|596|230|265|60|262|264|687|227|672|234|505|683|31|47|977|674|64|968|92|507|64|51|63|680|675|48|1787|1939|850|351|595|970|689|974|262|40|7|250|966|249|221|65|500|4779|677|232|503|378|252|508|381|211|239|597|421|386|46|268|1721|248|963|1649|235|228|66|992|690|993|670|676|1868|216|90|688|886|255|256|380|598|1|998|3906698|379|1784|58|1284|1340|84|678|681|685|967|27|260|263)(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)\d{4,20}$/
स्पष्ट रूप से ऐसा करने के तरीकों की एक भीड़ है, जैसा कि इस प्रकार अब तक दिए गए सभी अलग-अलग उत्तरों से स्पष्ट है, लेकिन मैं अपनी $ 0.02 की कीमत यहां फेंकूंगा और नीचे regex प्रदान करूंगा, जो उपरोक्त सभी की तुलना में थोड़ा अधिक है। , लेकिन अधिक से अधिक पूरी तरह से। यह $ 1 में देश कोड छोड़ने और $ 2 में स्थानीय संख्या का अच्छा साइड-इफेक्ट भी है।
^ \ + (? = \ घ {5,15} $) (1 | 2 [078] | 3 [0-469] | 4 [013-9] | 5 [1-8] | 6 [0-6] | 7 | 8 [1-469] | 9 [0-58] | [2-9] ..) (\ d +) $
उन महान जवाबों के बारे में कोई आलोचना नहीं जो मैं सिर्फ अपने व्यवस्थापक सामग्री रचनाकारों के लिए उपयोग किए जाने वाले सरल समाधान को प्रस्तुत करना चाहता हूं:
^(\+|00)[1-9][0-9 \-\(\)\.]{7,}$
बल एक प्लस या दो शून्य से शुरू होता है और कम से कम संख्या में, सफेद स्थान, ब्रेसिज़, माइनस और बिंदु का उपयोग वैकल्पिक है और कोई अन्य वर्ण नहीं है। आप सभी गैर-संख्याओं को सुरक्षित रूप से निकाल सकते हैं और इसे एक टेली: इनपुट में उपयोग कर सकते हैं। संख्याओं का प्रतिनिधित्व एक सामान्य रूप होगा और मुझे प्रतिबंधात्मक होने के बारे में चिंता करने की आवश्यकता नहीं है।
यूरोपीय संख्याओं के लिए एक सरल संस्करण, जो 0034617393211 जैसी संख्याओं के साथ मेल खाता है, लेकिन 00440148417342 के रूप में लंबे भी हैं।
^0{2}[0-9]{11,}
आशा करता हूँ की ये काम करेगा :·)
public static boolean validateInternationalPhoneNumberFormat(String phone) {
StringBuilder sb = new StringBuilder(200);
// Country code
sb.append("^(\\+{1}[\\d]{1,3})?");
// Area code, with or without parentheses
sb.append("([\\s])?(([\\(]{1}[\\d]{2,3}[\\)]{1}[\\s]?)|([\\d]{2,3}[\\s]?))?");
// Phone number separator can be "-", "." or " "
// Minimum of 5 digits (for fixed line phones in Solomon Islands)
sb.append("\\d[\\-\\.\\s]?\\d[\\-\\.\\s]?\\d[\\-\\.\\s]?\\d[\\-\\.\\s]?\\d[\\-\\.\\s]?");
// 4 more optional digits
sb.append("\\d?[\\-\\.\\s]?\\d?[\\-\\.\\s]?\\d?[\\-\\.\\s]?\\d?$");
return Pattern.compile(sb.toString()).matcher(phone).find();
}
यहाँ निम्नलिखित सबसे सामान्य फ़ोन नंबर परिदृश्यों के लिए एक regex है। हालांकि यह क्षेत्र के कोड के लिए एक अमेरिकी दृष्टिकोण से सिलवाया गया है जो अंतरराष्ट्रीय परिदृश्यों के लिए काम करता है।
एक मान्य फ़ोन नंबर सभी शून्य नहीं हो सकता।
^(?!\b(0)\1+\b)(\+?\d{1,3}[. -]?)?\(?\d{3}\)?([. -]?)\d{3}\3\d{4}$
स्पष्टीकरण:
^ - start of expression
(?!\b(0)\1+\b) - (?!)Negative Look ahead. \b - word boundary around a '0' character. \1 backtrack to previous capturing group (zero). Basically don't match all zeros.
(\+?\d{1,3}[. -]?)? - '\+?' plus sign before country code is optional.\d{1,3} - country code can be 1 to 3 digits long. '[. -]?' - spaces,dots and dashes are optional. The last question mark is to make country code optional.
\(?\d{3}\)? - '\)?' is to make parentheses optional. \d{3} - match 3 digit area code.
([. -]?) - optional space, dash or dot
$ - end of expression
अधिक उदाहरण और स्पष्टीकरण - https://regex101.com/r/hTH8Ct/2/
मैंने इसे नीचे इस्तेमाल किया है:
^(\+|00)[0-9]{1,3}[0-9]{4,14}(?:x.+)?$
प्रारूप + CCC.NNNNNNNNNNxEEEE या 00CCC.NNNNNNNNNNEE
अंतर्राष्ट्रीय कॉल के लिए फ़ोन नंबर '+' या '00' से शुरू होना चाहिए। जहां C 1–3 अंकों वाला देश कोड है,
N 14 अंक तक है,
और E एक वैकल्पिक (वैकल्पिक) विस्तार है।
देश के कोड का अनुसरण करने वाले प्रमुख धन चिह्न और बिंदु की आवश्यकता है। यदि एक्सटेंशन प्रदान किया गया है, तो शाब्दिक "x" वर्ण आवश्यक है।
फ़ोन नंबर सत्यापन के लिए निम्न API आज़माएँ। इसके अलावा यह कंट्री, एरिया और प्रोवाइडर को लौटा देगा
डेमो https://libphonenumber.appspot.com/
git https://github.com/googlei18n/libphonenumber/releases/tag/v8.9.0
अंतर्राष्ट्रीय नंबरिंग योजना ITU E.164 नंबरिंग योजना पर आधारित है । मुझे लगता है कि यह आपकी नियमित अभिव्यक्ति का शुरुआती बिंदु है।
अगर मैं ITU E.164 नंबरिंग के आधार पर एक नियमित अभिव्यक्ति बनाने के लिए चारों ओर मिलता हूं तो मैं इसे अपडेट करूंगा।
भले ही यह वास्तव में काम पूरा करने के लिए RegExp का उपयोग नहीं कर रहा है - या शायद इस वजह से - यह मेरे लिए एक अच्छा समाधान की तरह दिखता है: https://intl-tel-input.com/node_modules/intl-tel-input/exports/ /gen/is-valid-number.html
यह कोशिश करो, यह मेरे लिए काम करता है।
^(00|\+)[1-9]{1}([0-9][\s]*){9,16}$
मैंने यूरोपीय फोन नंबरों के लिए regexp बनाया, और यह डायल उपसर्ग बनाम संख्या की लंबाई के खिलाफ विशिष्ट है।
const PhoneEuropeRegExp = () => {
// eu phones map https://en.wikipedia.org/wiki/Telephone_numbers_in_Europe
const phonesMap = {
"43": [4, 13],
"32": [8, 10],
"359": [7, 9],
"385": [8, 9],
"357": 8,
"420": 9,
"45": 8,
"372": 7,
"358": [5, 12],
"33": 9,
"350": 8,
"49": [3, 12],
"30": 10,
"36": [8, 9],
"354": [7, 9],
"353": [7, 9],
"39": [6, 12],
"371": 8,
"423": [7, 12],
"370": 8,
"352": 8,
"356": 8,
"31": 9,
"47": [4, 12],
"48": 9,
"351": 9,
"40": 9,
"421": 9,
"386": 8,
"34": 9,
"46": [6, 9],
};
const regExpBuilt = Object.keys(phonesMap)
.reduce(function(prev, key) {
const val = phonesMap[key];
if (Array.isArray(val)) {
prev.push("(\\+" + key + `[0-9]\{${val[0]},${val[1]}\})`);
} else {
prev.push("(\\+" + key + `[0-9]\{${val}\})`);
}
return prev;
}, [])
.join("|");
return new RegExp(`^(${regExpBuilt})$`);
};
alert(PhoneEuropeRegExp().test("+420123456789"))
यह कोशिश करो, मुझे नहीं पता कि 12 से अधिक कोई फोन नंबर है:
^(00|\+){1}\d{12}$
^(00|\+){1}\d{12,15}$
फिर कैसे ?