केवल वर्णमाला वर्णों से मेल खाने के लिए नियमित अभिव्यक्ति


157

मैं सोच रहा था कि क्या मुझे एक नियमित अभिव्यक्ति मिल सकती है जो एक स्ट्रिंग से मेल खाएगी जिसमें केवल वर्णमाला वर्ण हैं, और वह भी अकेले।


2
कुछ ऐसा / ^ [a-zA-Z] + $ / काम करना चाहिए।
जुलियन गो

10
क्या àआपकी परिभाषा के अनुसार एक वर्णमाला वर्ण है? आप किस भाषा का उपयोग कर रहे हैं?
टिम पीटरज़

2
एक खाली स्ट्रिंग मैच चाहिए?
सुबह 11:30

एक खाली स्ट्रिंग नहीं होना चाहिए
स्टीफन हैरिस

एक महत्वपूर्ण नोट: आपने एक भाषा या उपकरण का उल्लेख नहीं किया है जहाँ आप अपने द्वारा पूछे जा रहे रेक्सक्स का उपयोग करना चाहते हैं। सरीसृपों के सिद्धांत समान रूप से समान हैं, वाक्यविन्यास हर जगह समान रूप से नहीं है। आपको यह बताना चाहिए कि आप इसका कहां उपयोग करना चाहते हैं।
सेरगिओल

जवाबों:


186

आप इनमें से किसी भी 2 प्रकार का उपयोग कर सकते हैं:

/^[A-Z]+$/i
/^[A-Za-z]+$/

ASCII वर्णमाला के इनपुट स्ट्रिंग का मिलान करने के लिए।

  • [A-Za-z] सभी अक्षर (लोअरकेस और अपरकेस) दोनों से मेल खाएगा।
  • ^और $यह सुनिश्चित कर लेगा कि इन वर्णमालाओं का मिलान नहीं किया जाएगा।

कोड:

preg_match('/^[A-Z]+$/i', "abcAbc^Xyz", $m);
var_dump($m);

आउटपुट:

array(0) {
}

परीक्षण का मामला ओपी की टिप्पणी के लिए है कि वह केवल तभी मिलान करना चाहता है जब इनपुट में 1 या अधिक अक्षर मौजूद हों। जैसा कि आप परीक्षण मामले में देख सकते हैं कि मिलान विफल हो गया क्योंकि ^इनपुट स्ट्रिंग में था abcAbc^Xyz

नोट: कृपया ध्यान दें कि उपरोक्त उत्तर केवल ASCII वर्णमाला से मेल खाता है और यूनिकोड वर्णों से मेल नहीं खाता है। यदि आप यूनिकोड अक्षरों का मिलान करना चाहते हैं तो उपयोग करें:

/^\p{L}+$/u

यहां, \p{L}किसी भी भाषा के किसी भी प्रकार के पत्र से मेल खाता है


22
कुछ बोलियों में, [Az] ASCII विराम चिह्नों का मिलान करेगा जो 'Z' और 'a' के बीच होता है, विशेष रूप से '[', '\', ']', '^', '-' और '`', के रूप में साथ ही 'ए' 'जेड' और 'ए' थ्रू 'जेड'।
ली

जो मैं वास्तव में चाहता था वह मेरे तार से मेल खाने का तरीका है जब इसमें वर्णमाला वर्ण होते हैं, यदि इसमें एक गैर अक्षर वर्ण होता है, तो इसे मेल नहीं खाना चाहिए।
स्टीफन हैरिस

7
@ ली: कुछ नहीं। उन सभी को। यह रेगेक्स अपनी वर्तमान स्थिति में गलत है।
टिम पीटरज़

7
\w is shorthand for A-Za-z- वास्तव में नहीं, के \wलिए आशुलिपि है[a-zA-Z0-9_]
शुभ

1
अच्छी बात @ jpmc26 मैंने अपनी मूल गलती को दूर करने के लिए अपना उत्तर संपादित किया है।
शुभ

55

यदि आपको गैर-ASCII वर्णमाला वर्णों को शामिल करने की आवश्यकता है, और यदि आपका regex स्वाद यूनिकोड का समर्थन करता है, तो

\A\pL+\z

सही regex होगा।

कुछ रेगेक्स इंजन इस यूनिकोड सिंटैक्स का समर्थन नहीं करते हैं लेकिन \wअल्फ़ान्यूमेरिक शॉर्टहैंड को गैर-एएससीआईआई अक्षरों से मेल खाने की अनुमति देते हैं । उस स्थिति में, आप अंकों और अंकों को घटाकर \wइस तरह से सभी वर्णमाला प्राप्त कर सकते हैं :

\A[^\W\d_]+\z

\Aस्ट्रिंग की शुरुआत में, स्ट्रिंग \zके अंत में मैच ( ^और $रूबी जैसी कुछ भाषाओं में लाइनों के शुरू / अंत में मेल खाते हैं, या यदि कुछ regex विकल्प सेट हैं)।


38
+1 अंग्रेजी वर्णमाला को केवल वर्णमाला के रूप में नहीं मानने के लिए
srcspider

7
+1, ऊपर जैसा है। अंग्रेजी केवल वर्णमाला नहीं है और बहुत से लोग इसे सही ढंग से व्यक्त करने के लिए गैर-अस्सी पात्रों का उपयोग करके अपना नाम लिखते हैं।
बेन बर्काय

22

यह एक या अधिक वर्णमाला वर्णों से मेल खाएगा:

/^[a-z]+$/

आप इसका उपयोग कर मामले को असंवेदनशील बना सकते हैं:

/^[a-z]+$/i

या:

/^[a-zA-Z]+$/

यह केवल लैटिन वर्णों से मेल खाएगा।
कोट्रो

13

रूबी और अन्य भाषाओं में जो ब्रैकेट के भावों में POSIX वर्ण वर्गों का समर्थन करती हैं, आप बस कर सकते हैं:

/\A[[:alpha:]]+\z/i

यह सभी यूनिकोड वर्णमाला भाषाओं में अल्फा-चार्ट से मेल खाएगा। बहुत आसान।

अधिक जानकारी: http://en.wikipedia.org/wiki/Regular_expression#Character_classes http://ruby-doc.org/core-2.0/Regexp.html


1
और सब कुछ प्राप्त करने के लिए लेकिन उन पात्रों (जो दस्तावेज नहीं थे) का उपयोग करते हैं [^[:alpha]]
18

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