शब्दों के बीच रिक्त स्थान की अनुमति देने के लिए नियमित अभिव्यक्ति


188

मैं एक नियमित अभिव्यक्ति चाहता हूं जो प्रतीकों को रोकता है और केवल अक्षरों और संख्याओं की अनुमति देता है। नीचे दिया गया रेगेक्स बढ़िया काम करता है, लेकिन यह शब्दों के बीच रिक्त स्थान की अनुमति नहीं देता है।

^[a-zA-Z0-9_]*$

उदाहरण के लिए, इस नियमित अभिव्यक्ति का उपयोग करते समय "हैलोवर्ल्ड" ठीक है, लेकिन "हैलो वर्ल्ड" मेल नहीं खाता।

रिक्त स्थान की अनुमति देने के लिए मैं इसे कैसे ट्वीक कर सकता हूं?

जवाबों:


368

tl; डॉ

बस अपने चरित्र वर्ग में एक स्थान जोड़ें ।

^[a-zA-Z0-9_ ]*$

 


अब, यदि आप सख्त होना चाहते हैं ...

ऊपर बिल्कुल सही नहीं है। इस तथ्य के कारण कि *इसका अर्थ शून्य या अधिक है , यह निम्नलिखित सभी मामलों से मेल खाता है जो आमतौर पर मिलान करने के लिए नहीं होगा:

  • एक खाली स्ट्रिंग, ""।
  • एक स्ट्रिंग में पूरी तरह से रिक्त स्थान शामिल थे, ""।
  • एक स्ट्रिंग जो स्पेस के साथ और / या ट्रेल्स करता है, "हैलो वर्ल्ड"।
  • एक स्ट्रिंग जिसमें शब्दों के बीच में कई स्थान होते हैं, "हैलो वर्ल्ड"।

मूल रूप से मुझे नहीं लगता था कि इस तरह के विवरण में जाने के लायक थे, क्योंकि ओपी ऐसा बुनियादी सवाल पूछ रहा था कि ऐसा लगता था कि सख्ती चिंता का विषय नहीं है। अब जबकि प्रश्न ने कुछ लोकप्रियता हासिल की है, लेकिन मैं कहना चाहता हूं ...

... @ स्टेमा के उत्तर का उपयोग करें ।

जो, मेरे स्वाद में (उपयोग किए बिना \w) अनुवाद करता है:

^[a-zA-Z0-9_]+( [a-zA-Z0-9_]+)*$

(कृपया @stema पर ध्यान न दें।)

इस पर ध्यान देने योग्य कुछ बातें (और @ स्टैमा का) उत्तर दें:

  • यदि आप शब्दों के बीच कई रिक्त स्थान की अनुमति देना चाहते हैं (कहते हैं, यदि आप आकस्मिक डबल-स्पेस की अनुमति देना चाहते हैं, या यदि आप एक पीडीएफ से कॉपी-पेस्ट किए गए पाठ के साथ काम कर रहे हैं), तो +अंतरिक्ष के बाद जोड़ें :

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

    ^\w+(\s+\w+)*$

    यहां मैं +डिफ़ॉल्ट रूप से सुझाव देता हूं , उदाहरण के लिए, विंडोज लाइनब्रेक में अनुक्रम में दो व्हाट्सएप वर्ण शामिल हैं \r\n, इसलिए आपको +दोनों को पकड़ने की आवश्यकता होगी ।

अभी भी काम नहीं कर रहा है?

जाँचें कि आपके द्वारा उपयोग किए जा रहे नियमित अभिव्यक्तियों की कौन सी बोली है। * जावा जैसी भाषाओं में आप अपने बैकस्लैश, से बचने के लिए होगा यानी \\w और \\s। पुरानी या अधिक मूल भाषाओं और उपयोगिताओं में, जैसे sed, \wऔर \sपरिभाषित नहीं हैं, इसलिए उन्हें क्रमशः वर्ण वर्गों, जैसे [a-zA-Z0-9_] और [\f\n\p\r\t], के साथ लिखें ।

 


* मुझे पता है कि यह सवाल टैग है, लेकिन 25,000+ विचारों के आधार पर, मैं अनुमान लगा रहा हूं कि यह केवल उन लोगों को नहीं है जो इस सवाल पर आ रहे हैं। वर्तमान में यह Google पर खोज वाक्यांश, नियमित अभिव्यक्ति स्थान शब्द के लिए पहला हिट है


3
यह खाली स्ट्रिंग की अनुमति देता है
नेहा चौधरी

1
वाह, इतना सरल! धन्यवाद। वहाँ एक साइट या कुछ एक का उपयोग कर सकते हैं regex अभिव्यक्तियाँ उत्पन्न करने के लिए, noobs के लिए मेरा मतलब है ...
पियरे

1
@ पिएरे - मानव निर्देशों को लेना और उन्हें स्पष्ट नियमों में बदलना काफी मुश्किल है। (मानव भाषा तरल है और अस्पष्टताओं से भरा है, और हमारे दिमाग चीजों को हल करने और अंतराल को भरने के लिए आवश्यक अधिकांश काम करते हैं। कंप्यूटर में ऐसा मस्तिष्क नहीं है, और एक की नकल करने के लिए चतुर प्रयास अभी तक पर्याप्त शक्तिशाली नहीं हैं। ) Debuggex.com जैसे उपकरण मौजूद हैं जो आपके रेगेक्स को नेत्रहीन रूप से दर्शाते हैं , लेकिन जैसा कि यह अपील है कि यह पूर्ण शुरुआती के लिए बहुत उपयोगी नहीं हो सकता है। मैं मूल बातें नीचे पाने के लिए एक इंटरैक्टिव ट्यूटोरियल की सलाह देता हूं ।
एंड्रयू Cheong

1
हां, अगर रिक्त स्थान हैं तो भी आपका रेगेक्स मेल खाएगा। मेरा जवाब नेहा चौधरी की टिप्पणी पर था।
राजशेखर रेड्डी

1
@ तीन साल बाद - मैं आज इस सवाल पर आया, आपकी टिप्पणी देखी; मैं रेग्युलर एक्सप्रेशंस के परीक्षण के लिए रेगेक्स हीरो ( regexhero.net ) का उपयोग करता हूं । मुझे लगता है कि ऑनलाइन संस्करण केवल सिल्वरलाइट के साथ इंटरनेट एक्सप्लोरर में काम करता है, लेकिन यह कुछ भी नहीं से बेहतर है।
माइकल आर्मेस

120

एक संभावना यह है कि आप केवल चरित्र वर्ग में स्थान जोड़ सकते हैं, जैसे कि acheong87 ने सुझाव दिया है, यह इस बात पर निर्भर करता है कि आप अपने पैटर्न पर कितने सख्त हैं, क्योंकि यह 5 स्थानों से शुरू होने वाले स्ट्रिंग या केवल रिक्त स्थान वाले तारों की अनुमति देगा।

एक पैटर्न को परिभाषित करने के लिए अन्य संभावना है:

मैं \wइस का उपयोग करेंगे सबसे regex जायके में से है [a-zA-Z0-9_](कुछ में यह यूनिकोड आधारित है)

^\w+( \w+)*$

यह कम से कम एक शब्द की एक श्रृंखला की अनुमति देगा और शब्दों को रिक्त स्थान से विभाजित किया गया है।

^ स्ट्रिंग की शुरुआत का मिलान करें

\w+ कम से कम एक शब्द चरित्र की श्रृंखला का मिलान करें

( \w+)*एक ऐसा समूह है जिसे 0 या अधिक बार दोहराया जाता है। समूह में यह कम से कम एक शब्द चरित्र की एक श्रृंखला के बाद एक स्थान की उम्मीद करता है

$ स्ट्रिंग के अंत से मेल खाता है


यह: regex101.com/#javascript भी regex पैटर्न के लिए एक अच्छा स्पष्टीकरण प्रदान करता है जिसका आप विश्लेषण करना चाहते हैं।
डार्क स्टार

नाइस रेगेक्स, फिर बहुत सरल [0-9a-z] आदि
जॉर्ज


11

इसके साथ प्रयास करें:

^(\w+ ?)*$

स्पष्टीकरण:

\w             - alias for [a-zA-Z_0-9]
"whitespace"?  - allow whitespace after word, set is as optional

2
यह बहुत पीछे नरक नरक प्रेरित करने के लिए जा रहा है।
न्हात्थ

1
उदाहरण के लिए, एक गैर-मिलान स्ट्रिंग को देखते हुए ggggggggggggggggggggggggggggggggggggg;, आपका रीगेक्स अत्यधिक बैकट्रैकिंग के कारण परिणाम तक पहुंचने में बहुत लंबा समय लेने वाला है।
न्हात्थ

ठीक है, तो आप क्या सुझाव देते हैं?
hsz

7

मुझे लगता है कि आप अग्रणी / अनुगामी स्थान नहीं चाहते हैं। इसका मतलब है कि आपको रेगेक्स को "पहले चरित्र", "बीच में सामान" और "अंतिम चरित्र" में विभाजित करना होगा:

^[a-zA-Z0-9_][a-zA-Z0-9_ ]*[a-zA-Z0-9_]$

या यदि आप एक पर्ल-जैसे सिंटैक्स का उपयोग करते हैं:

^\w[\w ]*\w$

इसके अलावा: यदि आपने जानबूझकर अपने regex को कहा है कि यह खाली स्ट्रिंग्स को भी अनुमति देता है, तो आपको पूरी बात को वैकल्पिक बनाना होगा:

^(\w[\w ]*\w)?$

यदि आप केवल सिंगल स्पेस चार्ट की अनुमति देना चाहते हैं, तो यह थोड़ा अलग दिखता है:

^((\w+ )*\w+)?$

यह एक स्थान के बाद 0..n शब्द और अंतरिक्ष के बिना एक शब्द से मेल खाता है। और खाली चीज को अनुमति देने के लिए पूरी बात को वैकल्पिक बनाता है।


अंतरिक्ष और \sसमकक्ष नहीं हैं। \sअंतरिक्ष से अधिक मेल खाता है।
न्हात्थ

@nhahtdh: टिप्पणी के लिए धन्यवाद। मुझे सामान्य रूप से व्हॉट्सएप का मिलान करने की आदत है। मुझे लगता है कि उत्तर निश्चित है।
creinig

क्या यह संभव है कि आप पहली अभिव्यक्ति में एक बंद कोष्ठक को याद कर रहे हों)? मुझे यकीन नहीं है कि मैंने यह कोशिश नहीं की।
ssinfod

@ssinfod: अच्छी पकड़। वास्तव में ओपनिंग कोष्ठक उस उदाहरण में बहुत अच्छा है। धन्यवाद।
क्रेनिग

3

यह नियमित अभिव्यक्ति

^\w+(\s\w+)*$

केवल शब्दों और कोई अग्रणी या अनुगामी रिक्त स्थान के बीच एक एकल स्थान की अनुमति देगा।

नीचे नियमित अभिव्यक्ति की व्याख्या है:

  1. ^ स्ट्रिंग की शुरुआत में स्थिति का आकलन करें
  2. \w+ किसी भी शब्द वर्ण से मिलान करें [a-zA-Z0-9_]
    1. परिमाणक: +एक और असीमित समय के बीच, जितनी बार संभव हो, उतनी बार वापस देने की जरूरत है [लालची]
  3. 1 कैप्चरिंग ग्रुप (\s\w+)*
    1. क्वांटिफायर: *शून्य और असीमित समय के बीच, जितनी बार संभव हो, उतनी बार वापस देने की जरूरत है [लालची]
    2. \s किसी भी श्वेत अंतरिक्ष वर्ण से मिलान करें [\r\n\t\f ]
    3. \w+ किसी भी शब्द वर्ण से मिलान करें [a-zA-Z0-9_]
      1. परिमाणक: +एक और असीमित समय के बीच, जितनी बार संभव हो, उतनी बार वापस देने की जरूरत है [लालची]
  4. $ स्ट्रिंग के अंत में स्थिति दर्ज करें

2

यह शुरुआत में जगह की अनुमति नहीं देता है। लेकिन शब्दों के बीच रिक्त स्थान की अनुमति देता है। शब्दों के बीच विशेष वर्णों के लिए भी अनुमति देता है। FirstName और LastName फ़ील्ड के लिए एक अच्छा रेगेक्स।

\w+.*$

यह उत्तर गलत / गलत है। यह पैटर्न एक या अधिक अल्फ़ान्यूमेरिक, अंडरस्कोर, फिर शून्य या अधिक किसी भी गैर-न्यूलाइन वर्ण से मेल खाता है। ओपी के लिए अच्छा नहीं है।
मिकमैकुसा

2

केवल अक्षर के लिए:

^([a-zA-Z])+(\s)+[a-zA-Z]+$

अल्फ़ान्यूमेरिक मान और के लिए _:

^(\w)+(\s)+\w+$

1
यह अच्छा उदाहरण नहीं है, क्योंकि (कुछ) + (कुछ +) के समान नहीं है। पहले उदाहरण में, केवल एकल वर्ण $ 1 के रूप में कैप्चर किया जाएगा।
ज़नीक

0

इसे आज़माएँ: (पायथन संस्करण)

"(A-Za-z0-9 ){2, 25}"

अपने डेटा सेट के आधार पर ऊपरी सीमा बदलें


0

इस प्रकार अपने regex पैटर्न के अंत में एक स्थान जोड़ें:

[a-zA-Z0-9_ ]

-1

इनमें से कई जवाबों पर एक अच्छी नज़र थी ...

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

^[a-zA-Z]+[(?<=\d\s]([a-zA-Z]+\s)*[a-zA-Z]+$

इस प्रकार आसानी से अल्फ़ान्यूमेरिक के लिए संशोधित:

^[a-zA-Z0-9]+[(?<=\d\s]([a-zA-Z0-9]+\s)*[a-zA-Z0-9]+$

(यह एकल शब्दों से मेल नहीं खाता है, लेकिन ^[a-zA-Z0-9]+$यदि आपको इसके अलावा एकल शब्दों को पकड़ने की आवश्यकता है, तो बस एक स्विच का उपयोग करें / अगर-और है ।)

आनंद लें: डी


3
[(?<=\d\s]से मेल खाता है एक वर्ण: (, ?, <, =, एक अंकों, या एक खाली स्थान के चरित्र, और कहा कि नहीं किया जा सकता है कि तुम क्या मतलब है। यदि यह एक खोजपूर्ण होना चाहिए था, तो यह होना चाहिए (?<=\d\s), लेकिन इसका कोई मतलब नहीं है; रेगेक्स कभी मैच नहीं होगा।
एलन मूर

अपवित्र करने के लिए: कृपया गलत समाधान न करें। वे अन्य उपयोगकर्ताओं को भ्रमित करते हैं और उन्हें विश्वास दिलाते हैं कि रेगेक्स ऐसी चीजें कर सकता है जो यह नहीं करता है।
विकटोरिया स्ट्राइब्यूव


-4

प्रयत्न ।*? सफेद रिक्त स्थान की अनुमति देने के लिए यह मेरे लिए काम किया


ऐसा इसलिए है क्योंकि .सब कुछ मेल खाता है। यह यहाँ समाधान नहीं होने की बहुत संभावना है।
रुबिक

यह शून्य या किसी भी वर्ण से मेल खाता है, जो इस क्रम से पहले और बाद में निर्भर है। यह यथासंभव कम से मेल खाएगा। सिंगल डॉट किसी भी एकल चरित्र का प्रतिनिधित्व करता है।
ज़नीक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.