2012-02-04 10 views
9

मैंने^(circumflex) और $ (मुद्रा या डॉलर) वर्णों के बिना अधिकतर उदाहरणों को देखा है ताकि स्ट्रिंग मिलान के अंत में शुरुआत हो सके। हालांकि, मुझे HTML5 spec में इसके बारे में कुछ भी नहीं मिला। क्या वे पैटर्न में निहित हैं? एचटीएमएल 5 spec का कहना है कि वे निहित हैं।

संकलित पैटर्न नियमित अभिव्यक्ति, जब एक स्ट्रिंग के खिलाफ मिलान किया जाता है, तो स्ट्रिंग की शुरुआत में इसकी शुरुआत लगी होनी चाहिए और इसकी अंत स्ट्रिंग के अंत तक लगी होनी चाहिए। इसका तात्पर्य यह है कि इस विशेषता के लिए उपयोग की जाने वाली नियमित अभिव्यक्ति भाषा जावास्क्रिप्ट में उपयोग की तरह ही होती है, सिवाय इसके कि पैटर्न विशेषता पूरी मान के मुकाबले मेल खाती है, न केवल किसी सबसेट (कुछ हद तक जैसे कि यह^^ (?: पैटर्न की शुरुआत और ए) अंत में $)।

टाइप = "टेक्स्ट" इनपुट में, पैटर्न प्रारूप का उपयोग करके ठीक काम करता है, हालांकि टाइप = "टेल" इनपुट में, मुझे रेगेक्स के लिए वर्णों को उम्मीद के अनुसार काम करना पड़ा। मैंने ओपेरा और फ़ायरफ़ॉक्स दोनों में परीक्षण किया है।

क्या यह एक ब्राउज़र बग है? क्या मुझे बगजिला आदि में एक बग फाइल करना चाहिए?


संपादित करें: ऐसा लगता है कि मैं एक अजीब बग uppon ठोकर खाई किया है, क्योंकि मैं एक कम परीक्षण का मामला बनाने में असमर्थ हूँ। किसी पृष्ठ में एक साधारण इनपुट ऊपर वर्णित व्यवहार को नहीं दिखाता है। हालांकि, सवाल बनी हुई है। क्या मुझे चाहिए, या मुझे डार्न^और $ एंकर का उपयोग नहीं करना चाहिए?

+1

https://developer.mozilla.org/en/HTML/Forms_in_HTML उल्लेख इस 'tel' इनपुट पर: * लाइन ब्रेक स्वचालित रूप से इनपुट मूल्य से निकाल दिया जाता है, लेकिन कोई अन्य वाक्य रचना लागू की जाती है क्योंकि टेलीफोन नंबरों व्यापक रूप से भिन्न अंतरराष्ट्रीय स्तर पर। आप नियंत्रण में दर्ज मानों को प्रतिबंधित करने के लिए पैटर्न और अधिकतम लम्बाई जैसे गुणों का उपयोग कर सकते हैं। *। यह 'टेलर' प्रकार के 'पैटर्न' विशेषता विवरण में विशिष्ट कुछ भी उल्लेख नहीं करता है। –

+0

दरअसल, अगर मैं फ़ायरफ़ॉक्स से जांचता हूं, तो मुझे 'टेलि' इनपुट में कोई अजीब व्यवहार नहीं दिखता है। क्या आप कोड सहित एक पूर्ण उदाहरण दे सकते हैं, जो आपने अपेक्षित था, और इसके बजाय आपको क्या मिला? –

+0

हाँ, मैंने अभी देखा है, और प्रश्न में एक संपादन संलग्न किया है। मेरा फॉर्म यहां पोस्ट करने के लिए थोड़ा मुश्किल है, लेकिन मैं देखता हूं कि मैं क्या कर सकता हूं। –

उत्तर

2

बेशक आप जानते हैं कि फोन नंबर अलग अलग रूपों में आते हैं,

उदा

  • जबकि वियना, आस्ट्रिया, में किया जा रहा डायल "4000" सिटी हॉल के लिए कनेक्ट करेगा।
  • जबकि इंसब्रुक, आस्ट्रिया में किया जा रहा है, तो आप "014,000" वियना सिटी हॉल
  • डायल करने के लिए, जबकि न्यूयॉर्क, संयुक्त राज्य अमेरिका में किया जा रहा है आप 4,314,000 डायल करने के लिए एक ही नंबर डायल करने की जरूरत है डायल करने की जरूरत है।

इस ऐतिहासिक कारणों के साथ, पुरानी यांत्रिक प्रणाली के साथ प्रत्येक डिवाइस के साथ एक डिवाइस से कॉल को जोड़ने के काम को प्रस्तुत करने के काम को दर्शाता है (यही कारण है कि विस्तार एक संख्या के अंत में हैं, न कि शुरू में, डीएनएस जहां मोर्चे पर अपने डोमेन नाम का विस्तार कर सकते, लेकिन अंत में नहीं) AOT

अब दोनों एंकर ^ और $ साथ एक regex एक फोन नंबर केवल, मेल कराएंगे यह वास्तव में दी गई है एक ही रूप केवल $ एंकर के साथ यह विश्वसनीय रूप से उसी फ़ोन नंबर से मेल खाता है, जब तक कि कोई अलग एक्सटेंशन नहीं दिया जाता है। कोई लंगर, यानी ^ और $ छोड़ने स्थान कोड और एक्सटेंशन के स्वतंत्र की भरपाई कर देंगे, लेकिन अविश्वसनीयता का परिचय देंगे:

"4000" का उपयोग वियना सिटी हॉल के लिए एक पैटर्न के रूप में "4000" से मेल खाएगी, "014,000" और "+ 4314000 ", लेकिन यह" +44140001 "से मेल खाता है जो एक जर्मन बैंक है।

+0

अब मैं थोड़ा उलझन में हूं। शायद मुझे अपने प्रश्न के साथ एक उदाहरण पोस्ट करना चाहिए था। उदाहरण के लिए "^ [\ d] {10} $" का उपयोग करके, एक टेली इनपुट में 1234567890 से मेल नहीं खाता है, लेकिन इसे नहीं करना चाहिए? –

+0

फ़ोन नंबरों की यह बात कहां से आई? क्या सवाल बदल गया है? – Borodin

+0

नहीं, यह विशेष रूप से दूरभाष इनपुट बारे में बात करती –

2

मानक के अनुसार, the regex is anchored at the start and end। हालांकि, अभ्यास में (परीक्षण एफएफ 15 और क्रोम 21) यह केवल शुरुआत में ही लगी हुई है!

तो यदि आप मानक और वास्तविकता दोनों के साथ संगत होना चाहते हैं, तो आपको अपने रेगेक्स को $ स्पष्ट रूप से एंकर करना चाहिए। ^ का उपयोग करना भी आपके ऊपर है - यह आवश्यक नहीं है।

+0

ठीक है, स्वयंसेवक एक बग दर्ज करने के लिए? –

संबंधित मुद्दे