Formatter iOS में डेटा इनपुट फ़ॉर्मेटिंग की एक प्रणाली है जो स्वचालित रूप से असंरचित टेक्स्ट को निर्दिष्ट प्रारूप में परिवर्तित करती है। सिस्टम क्लासेज़ NSFormatter और InputMask फ़ोन नंबर, क्रेडिट कार्ड, तिथियाँ और अन्य संरचित डेटा प्रोसेस करने की अनुमति देती हैं। Apple Foundation Framework Reference (2025) के अनुसार, सही इनपुट फ़ॉर्मेटिंग फ़ॉर्म भरने में त्रुटियों को 55% तक कम करती है और डेटा प्रविष्टि को 30% तक तेज़ करती है। उन सभी फ़ील्ड्स के लिए फ़ॉर्मेटर का उपयोग करें जहाँ संरचित इनपुट अपेक्षित है — इससे उपयोगकर्ता अनुभव और एकत्रित डेटा की गुणवत्ता में सुधार होता है।
मुख्य बिंदु
Formatter iOS में एक घटक है जो कच्चे उपयोगकर्ता इनपुट को दिए गए पैटर्न के अनुसार संरचित प्रारूप में परिवर्तित करता है। फ़ॉर्म सबमिशन के बाद सरल सत्यापन के विपरीत, फ़ॉर्मेटर रीयल-टाइम में काम करता है, डेटा दर्ज करते ही प्रदर्शन को सही करता है। यह मुख्य अंतर है: उपयोगकर्ता तुरंत फ़ॉर्मेटेड परिणाम देखता है, बिना मैन्युअल रूप से विभाजक दर्ज करने की आवश्यकता के।
iOS कई फ़ॉर्मेटिंग स्तर प्रदान करता है: डेटा प्रदर्शन के लिए सिस्टम Foundation फ़ॉर्मेटर (NumberFormatter, DateFormatter, ByteCountFormatter), फ़ोन नंबर के लिए PhoneNumberKit फ्रेमवर्क, और कस्टम इनपुट मास्क के लिए तृतीय-पक्ष InputMask लाइब्रेरीज़। स्तर का चुनाव डेटा प्रकार और आवश्यक फ़ॉर्मेटिंग लचीलेपन पर निर्भर करता है।
Apple Human Interface Guidelines के अनुसार, इनपुट फ़ॉर्मेटर तीन कार्य हल करते हैं: उपयोगकर्ता पर संज्ञानात्मक भार कम करना (विभाजकों के बारे में सोचने की आवश्यकता नहीं), त्रुटियों की संख्या कम करना (डेटा सही प्रारूप में दर्ज होता है), और फ़ॉर्म भरने में तेज़ी लाना (अंक समूहों के बीच स्वचालित संक्रमण)।
फ़ॉर्मेटर विशेष रूप से मोबाइल उपकरणों के लिए महत्वपूर्ण हैं, जहाँ ऑन-स्क्रीन कीबोर्ड से इनपुट भौतिक कीबोर्ड की तुलना में अधिक प्रयास की आवश्यकता होती है। प्रत्येक अतिरिक्त वर्ण जो मैन्युअल रूप से दर्ज करना होता है, फ़ॉर्म भरने का समय और त्रुटि का जोखिम बढ़ाता है। विभाजकों का स्वचालित सम्मिलन सामान्य प्रारूपों के लिए टैप की संख्या 20–40% तक कम करता है।
iOS में इनपुट फ़ॉर्मेटर तीन श्रेणियों में विभाजित हैं: सिस्टम Foundation फ़ॉर्मेटर, विशेषित Apple फ़ॉर्मेटर (PhoneNumberKit), और तृतीय-पक्ष लाइब्रेरीज़ (InputMask, MaskedTextField)। प्रत्येक श्रेणी अपने कार्य हल करती है और इसमें कार्यान्वयन की विशिष्टताएँ हैं।
NumberFormatter संख्यात्मक मानों को फ़ॉर्मेट करता है: मौद्रिक राशियाँ, प्रतिशत, वैज्ञानिक संकेतन। समूह और दशमलव विभाजकों के स्थानीयकरण का समर्थन करता है। DateFormatter तिथियों और समयों को स्थानीयकृत स्ट्रिंग्स में परिवर्तित करता है। ये फ़ॉर्मेटर प्रदर्शन के लिए डिज़ाइन किए गए हैं, इनपुट मास्किंग के लिए नहीं, इसलिए टाइपिंग के दौरान इन्हें सीधे UITextField पर लागू करना कठिन है।
PhoneNumberKit Apple की एक लाइब्रेरी है जो राष्ट्रीय मानकों के अनुसार फ़ोन नंबर फ़ॉर्मेट करती है। यह कोड द्वारा स्वचालित रूप से देश का पता लगाती है और संबंधित प्रारूप लागू करती है। उदाहरण के लिए, रूसी नंबर +7 912 345-67-89 अमेरिकी नंबर +1 212-555-0198 से भिन्न रूप से फ़ॉर्मेट होता है। PhoneNumberKit नंबर की सत्यता भी जाँचता है।
तृतीय-पक्ष लाइब्रेरीज़ InputMask किसी भी प्रारूप के लिए एक सार्वभौमिक इनपुट मास्किंग तंत्र प्रदान करती हैं: कार्ड नंबर (0000 0000 0000 0000), तिथियाँ (DD.MM.YYYY), SNILS (000-000-000 00), INN (000000000000)। लाइब्रेरीज़ UITextFieldDelegate के माध्यम से काम करती हैं, इनपुट को इंटरसेप्ट करती हैं और रीयल-टाइम में मास्क लागू करती हैं।
| प्रकार | फ्रेमवर्क | उद्देश्य | मोड |
|---|---|---|---|
| संख्या | NumberFormatter | पैसा, प्रतिशत, वैज्ञानिक | प्रदर्शन |
| तिथियाँ | DateFormatter | तारीख, समय, टाइमस्टैम्प | प्रदर्शन |
| फ़ोन | PhoneNumberKit | देश मानकों के अनुसार नंबर | इनपुट + सत्यापन |
| मास्क | InputMask | कार्ड, कोड, SNILS, INN | रीयल-टाइम इनपुट |
NSFormatter Foundation की एक अमूर्त क्लास है जिससे सभी सिस्टम iOS फ़ॉर्मेटर वंशानुक्रम प्राप्त करते हैं। यह दो मुख्य विधियाँ परिभाषित करती है: string(for:) किसी ऑब्जेक्ट को स्ट्रिंग में बदलने के लिए और getObjectValue(_:for:errorDescription:) स्ट्रिंग से ऑब्जेक्ट में विपरीत रूपांतरण के लिए। यह द्वि-दिशात्मक तंत्र डेटा प्रदर्शित करने और टेक्स्ट फ़ील्ड से पढ़ने दोनों की अनुमति देता है।
सिस्टम क्लासेज़ द्वारा कवर न किए गए विशिष्ट प्रारूपों के लिए NSFormatter पर आधारित कस्टम फ़ॉर्मेटर बनाना संभव है। इसके लिए string(for:) और getObjectValue(_:for:errorDescription:) विधियों को ओवरराइड करना आवश्यक है। कस्टम फ़ॉर्मेटर का उपयोग UILabel, UITextField और अन्य व्यूज़ के साथ formatter प्रॉपर्टी के माध्यम से किया जा सकता है।
Apple कस्टम फ़ॉर्मेटर बनाने के बजाय मौजूदा Foundation फ़ॉर्मेटर का उपयोग करने की अनुशंसा करता है। NumberFormatter 32 भाषाओं और क्षेत्रीय मानकों को सही ढंग से संभालता है, DateFormatter विभिन्न संस्कृतियों के कैलेंडर को ध्यान में रखता है, और ByteCountFormatter मान के आकार के अनुसार बाइट्स, किलोबाइट्स और मेगाबाइट्स के बीच स्वचालित रूप से स्विच करता है।
NSFormatter गलत इनपुट के लिए त्रुटि संदेशों के स्थानीयकरण का भी समर्थन करता है। getObjectValue विधि त्रुटि का विवरण लौटाती है जिसे स्थानीयकृत रूप में उपयोगकर्ता को दिखाया जा सकता है। यह विशेष रूप से उन फ़ॉर्मों के लिए महत्वपूर्ण है जहाँ उपयोगकर्ता गलत प्रारूप में डेटा दर्ज करता है — त्रुटि संदेश समझने योग्य और इंटरफ़ेस भाषा में होना चाहिए।
Input Mask (इनपुट मास्क) एक टेम्पलेट है जो इनपुट डेटा का प्रारूप परिभाषित करता है और टाइप करते ही स्वचालित रूप से विभाजक सम्मिलित करता है। मास्क में प्लेसहोल्डर वर्ण (आमतौर पर अंकों के लिए 0 या 9, अक्षरों के लिए A) और स्थिर वर्ण (कोष्ठक, हाइफ़न, स्थान) होते हैं जो स्वचालित रूप से सम्मिलित होते हैं। उपयोगकर्ता केवल महत्वपूर्ण वर्ण दर्ज करता है, और विभाजक सिस्टम द्वारा सम्मिलित किए जाते हैं।
iOS के लिए सबसे लोकप्रिय लाइब्रेरी RedMadRobot की InputMask है। यह शर्तों, वैकल्पिक ब्लॉक और एफ़िक्स (उपसर्ग और प्रत्यय) के साथ जटिल मास्क का समर्थन करती है। लाइब्रेरी एक डेलिगेट के माध्यम से कार्यान्वित की गई है, जो इसे बिना सबक्लासिंग के किसी भी UITextField के साथ उपयोग करने की अनुमति देती है। फ़ोन नंबर, बैंक कार्ड, तिथियाँ, पुष्टिकरण कोड और अन्य संरचित डेटा के लिए मास्क समर्थित हैं।
InputMask प्रारूप अपने स्वयं के सिंटैक्स का उपयोग करता है: अनिवार्य वर्णों के लिए वर्गाकार कोष्ठक, वैकल्पिक के लिए घुंघराले कोष्ठक, कोष्ठक के बाहर स्थिर वर्ण। उदाहरण के लिए, कार्ड नंबर मास्क [0000] [0000] [0000] [0000] जैसा दिखता है, और तिथि मास्क [00]{.}[00]{.}[0000] जैसा। घुंघराले कोष्ठकों में वैकल्पिक ब्लॉक गायब हो जाते हैं यदि उपयोगकर्ता उनके लिए डेटा दर्ज नहीं करता है।
फ़ोन नंबर के लिए, मास्क में आमतौर पर एफ़िक्स में देश कोड शामिल होता है: +7 ([000]) [000]-[00]-[00]। उपयोगकर्ता नंबर के केवल 10 अंक दर्ज करता है, जबकि +7, (, ), - वर्ण स्वचालित रूप से सम्मिलित होते हैं। वर्ण हटाते समय, मास्क बैकस्पेस को सही ढंग से संभालता है, अंतिम महत्वपूर्ण वर्ण हटाकर पिछली स्थिति में लौटता है।
फ़ोन नंबर फ़ॉर्मेटिंग मोबाइल एप्लिकेशन में फ़ॉर्मेटर का सबसे सामान्य उपयोग मामला है। iOS इस उद्देश्य के लिए PhoneNumberKit फ्रेमवर्क प्रदान करता है, जो कोड द्वारा स्वचालित रूप से देश का पता लगाता है और संबंधित राष्ट्रीय प्रारूप लागू करता है। लाइब्रेरी 200 से अधिक देशों का समर्थन करती है और नियमित रूप से अपडेट होती है।
PhoneNumberKit दो चरणों में काम करता है: प्रारूप पहचान और उसका अनुप्रयोग। पहले चरण में, लाइब्रेरी दर्ज किए गए देश कोड (उदाहरण के लिए, +7 रूस की पहचान करता है) का विश्लेषण करती है और फ़ॉर्मेटिंग नियम लोड करती है। दूसरे चरण में, यह राष्ट्रीय मानक के अनुरूप मास्क लागू करती है: रूस के लिए +7 XXX XXX-XX-XX, USA के लिए — +1 XXX-XXX-XXXX, UK के लिए — +44 XXXX XXX XXX।
Apple Developer Documentation के अनुसार, iOS 16 से UIContentUnavailableConfiguration के माध्यम से फ़ोन नंबर फ़ॉर्मेटिंग की अंतर्निहित प्रणाली उपलब्ध हुई है। हालाँकि, पूर्ण रीयल-टाइम फ़ॉर्मेटिंग के लिए UITextFieldDelegate के माध्यम से PhoneNumberKit का उपयोग करने की अनुशंसा की जाती है। लाइब्रेरी नंबर की सत्यता भी जाँचती है: अंकों की संख्या, देश कोड की वैधता और राष्ट्रीय प्रारूप के अनुपालन की जाँच करती है।
अंतर्राष्ट्रीय अनुप्रयोगों के लिए, यह ध्यान रखना महत्वपूर्ण है कि उपयोगकर्ता नंबर किसी भी प्रारूप में दर्ज कर सकता है: +7, 8 (रूस के लिए) या देश कोड के बिना। एक अच्छे फ़ॉर्मेटर को किसी भी प्रारंभिक प्रारूप को पहचानना चाहिए और इसे + उपसर्ग और देश कोड के साथ एकल अंतर्राष्ट्रीय मानक में सामान्यीकृत करना चाहिए।
Swift में फ़ॉर्मेटर कार्यान्वयन चुने गए दृष्टिकोण पर निर्भर करता है। सिस्टम Foundation फ़ॉर्मेटर के लिए, formatter प्रॉपर्टी का उपयोग किया जाता है, जो iOS 15 से UITextField के लिए उपलब्ध है। Input Mask के लिए, InputMask लाइब्रेरी के साथ UITextFieldDelegate का उपयोग किया जाता है। फ़ोन नंबर के लिए — डेलिगेट के माध्यम से PhoneNumberKit।
import PhoneNumberKit
class PhoneViewController: UIViewController {
let phoneNumberKit = PhoneNumberKit()
@IBOutlet var phoneField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
phoneField.delegate = self
}
}
extension PhoneViewController: UITextFieldDelegate {
func textField(
_ textField: UITextField,
shouldChangeCharactersIn range: NSRange,
replacementString string: String
) -> Bool {
guard let text = textField.text else { return true }
let partial = (text as NSString).replacingCharacters(in: range, with: string)
textField.text = partial.applyPhoneMask()
return false
}
}
NumberFormatter के लिए iOS 15+ में, UITextField पर formatter प्रॉपर्टी उपलब्ध है जो टाइप करते ही दर्ज किए गए नंबर को स्वचालित रूप से फ़ॉर्मेट करती है। यह दृष्टिकोण डेलिगेट को लागू करने की आवश्यकता नहीं रखता है और मुद्रा प्रारूपों, प्रतिशत और उपयोगकर्ता की लोकेल को ध्यान में रखते हुए अन्य संख्यात्मक डेटा के लिए तुरंत काम करता है।
let amountField = UITextField()
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = Locale(identifier: "ru_RU")
amountField.formatter = formatter
RedMadRobot की InputMask लाइब्रेरी के लिए, सेटअप मास्क प्रारंभिकरण और डेलिगेट के माध्यम से अनुप्रयोग द्वारा किया जाता है। लाइब्रेरी पेस्ट हैंडलिंग, बैकस्पेस विलोपन का समर्थन करती है और टेक्स्ट चयन के साथ सही ढंग से काम करती है।
import InputMask
class CardViewController: UIViewController {
@IBOutlet var cardField: UITextField!
var listener: MaskedTextFieldDelegate!
override func viewDidLoad() {
super.viewDidLoad()
listener = MaskedTextFieldDelegate(
primaryMaskFormat: "[0000] [0000] [0000] [0000]"
)
cardField.delegate = listener
}
}
अक्सर पूछे जाने वाले प्रश्न
फ़ोन नंबर के लिए — PhoneNumberKit, सामान्य प्रयोजन मास्क के लिए — RedMadRobot की InputMask। संख्याओं और तिथियों के लिए, सिस्टम NumberFormatter और DateFormatter पर्याप्त हैं।
हाँ, UITextView UITextField के समान डेलिगेट और shouldChangeCharactersIn विधियों का समर्थन करता है। फ़ॉर्मेटर को UITextViewDelegate को लागू करके लागू किया जा सकता है।
पेस्टिंग को उसी shouldChangeCharactersIn डेलिगेट के माध्यम से संभाला जाता है। एक अच्छा फ़ॉर्मेटर पहले पेस्ट किए गए टेक्स्ट से सभी विभाजक हटाता है, फिर साफ डेटा पर मास्क लागू करता है।
नहीं, ईमेल का विभाजकों के साथ कोई निश्चित प्रारूप नहीं है। ईमेल के लिए, textContentType = .emailAddress और @ चिह्न वाला कीबोर्ड सेट करना पर्याप्त है।
आधुनिक फ़ॉर्मेटर प्रति वर्ण 1 मिलीसेकंड से भी कम में इनपुट प्रोसेस करते हैं। देरी उपयोगकर्ता के लिए अदृश्य है। InputMask और PhoneNumberKit लाइब्रेरीज़ रीयल-टाइम संचालन के लिए अनुकूलित हैं।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें