नियमित अभिव्यक्ति जो एक पैटर्न से मेल खाती है, या एक खाली स्ट्रिंग है


84

मेरे पास निम्नलिखित नियमित अभिव्यक्ति है जो एक ईमेल पते के प्रारूप से मेल खाती है:

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$

इसका उपयोग जावास्क्रिप्ट का उपयोग करके फॉर्म के सत्यापन के लिए किया जाता है। हालाँकि, यह एक वैकल्पिक क्षेत्र है। इसलिए मैं ईमेल पता प्रारूप, या खाली स्ट्रिंग से मिलान करने के लिए इस रेगेक्स को कैसे बदल सकता हूं?

अपने सीमित रेगेक्स ज्ञान से, मुझे लगता है कि \bएक खाली स्ट्रिंग से मेल खाता है, और |इसका अर्थ "या" है, इसलिए मैंने निम्नलिखित करने की कोशिश की, लेकिन मैंने काम नहीं किया:

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$|\b

5
यदि आपको किसी ईमेल को मान्य करना है , तो जितना संभव हो उतना अनुमति योग्य होना चाहिए। आपको आश्चर्य होगा कि होम-बेक्ड रेगेक्स के साथ वास्तविक, वैध और कार्यात्मक ईमेल पते को याद करना कितना आसान है। उदाहरण के लिए, आपका regex, इन मान्य पतों पर विफल हो जाएगा: joe_blow@foo.com, micro$oft@apple.com, root @ localhost, siegfried+roy@lasvegas.com।
Zano

Zano के साथ सहमत, बस इस regex ex-parrot.com/pdw/Mail-RFC822-Address.html
एंडर्स

@Anders वाह, एक बहुत ही जटिल regex thats! मुझे लगता है कि मैंने regex की जटिलता को गलत समझा है
कर्ट

4
नहीं, मुझे लगता है कि आपने ईमेल सत्यापन की जटिलता को गलत समझा है :-)
Zano

जवाबों:


199

मिलान करने के लिए patternया एक खाली स्ट्रिंग का उपयोग करें

^$|pattern

व्याख्या

  • ^और $क्रमशः स्ट्रिंग एंकर की शुरुआत और अंत हैं।
  • |वैकल्पिक को निरूपित करने के लिए प्रयोग किया जाता है, जैसे this|that

संदर्भ


पर \b

\bसबसे अधिक स्वाद में एक "शब्द सीमा" लंगर है। यह एक शून्य-चौड़ाई वाला मैच है, यानी एक खाली स्ट्रिंग, लेकिन यह केवल उन तारों से बहुत विशिष्ट स्थानों पर मेल खाता है , अर्थात् एक शब्द की सीमाओं पर।

वह \bस्थित है:

  • लगातार \wऔर \W(या तो आदेश) के बीच :
    • एक शब्द चरित्र और एक गैर शब्द चरित्र के बीच
  • के बीच ^और\w
    • यानी स्ट्रिंग की शुरुआत में अगर इसके साथ शुरू होता है \w
  • के बीच \wऔर$
    • स्ट्रिंग के अंत में यानी यदि यह समाप्त होता है \w

संदर्भ


ई-मेल पते से मेल करने के लिए regex का उपयोग करने पर

यह विनिर्देश के आधार पर तुच्छ नहीं है।

संबंधित सवाल


10

एक विकल्प यह होगा कि आप अपने regexp को गैर-कैप्चरिंग कोष्ठक में रखें। फिर ?क्वालीफायर का उपयोग करके उस अभिव्यक्ति को वैकल्पिक बनाएं , जो 0 (यानी खाली स्ट्रिंग) या गैर-कब्जा किए गए समूह के 1 उदाहरणों के लिए दिखेगा।

उदाहरण के लिए:

/(?: some regexp )?/

आपके मामले में नियमित अभिव्यक्ति कुछ इस तरह दिखाई देगी:

/^(?:[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+)?$/

कोई |"या" ऑपरेटर आवश्यक नहीं है!

यहाँ जावास्क्रिप्ट नियमित अभिव्यक्ति वाक्यविन्यास के लिए मोज़िला प्रलेखन है।


8

मुझे यकीन नहीं है कि आप वैकल्पिक ईमेल पते को मान्य क्यों करना चाहते हैं, लेकिन मैं आपको उपयोग करने का सुझाव दूंगा

^$|^[^@\s]+@[^@\s]+$

अर्थ

^$        empty string
|         or
^         beginning of string
[^@\s]+   any character but @ or whitespace
@         
[^@\s]+
$         end of string

आप वैसे भी नकली ईमेल बंद नहीं करेंगे, और इस तरह आप मान्य पते बंद नहीं करेंगे।


यदि कोई पता फ़ील्ड में दर्ज नहीं किया गया है, तो डेटाबेस में एक NULL मान दर्ज किया जाता है, इसलिए जब समाचार पत्र आदि भेजने की बात आती है, तो इससे निपटा जा सकता है। मैं इसकी सराहना करता हूं कि यह नकली पते को नहीं रोकेगा, और मैं नहीं लगता है कि रेगेक्स के साथ बिल्कुल संभव है, लेकिन यह कम से कम मानव-त्रुटि को कम करेगा
कर्ट

1
मेरा यह भी अनुरोध है कि ग्राहक भी ऐसा करें। यह केवल ग्राहकों को कुछ बेवकूफ बनाने से रोकने के लिए है जैसे ईमेल क्षेत्र में अपना फोन नंबर दर्ज करना।
केली जेंडरन

बस एक खाली स्ट्रिंग की जांच करना चाहता था। ^ $ काम किया
सुभाषी

1

\ b एक शब्द सीमा से मेल खाता है। मुझे लगता है कि आप खाली स्ट्रिंग के लिए ^ $ का उपयोग कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.