अक्षरों, संख्याओं और - _ के लिए नियमित अभिव्यक्ति


99

अगर मूल्य निम्न में से कोई भी संयोजन है, तो मुझे PHP में जांच करने में परेशानी हो रही है

  • अक्षर (ऊपरी या निचला हिस्सा)
  • संख्या (0-9)
  • अंडरस्कोर (_)
  • पानी का छींटा (-)
  • बिंदु (।)
  • जगह नहीं! या अन्य वर्ण

कुछ उदाहरण:

  • ठीक है: "screen123.css"
  • ठीक है: "स्क्रीन-नई-file.css"
  • ठीक है: "screen_new.js"
  • ठीक नहीं है: "स्क्रीन नई file.css"

मुझे लगता है कि मुझे इसके लिए एक regex की आवश्यकता है, क्योंकि मुझे एक त्रुटि फेंकने की आवश्यकता है जब ऊपर दिए गए लोगों की तुलना में एक स्ट्रिंग में अन्य वर्ण हैं।


^ [\ w .-] * $ -> यह सब फ़ाइल नाम मिलेगा।
बद्री जीएस

जवाबों:


206

आपको जो पैटर्न चाहिए वह कुछ इस तरह है ( इसे rubular.com पर देखें ):

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

स्पष्टीकरण:

  • ^ लाइन एंकर की शुरुआत है
  • $ लाइन एंकर का अंत है
  • [...] एक चरित्र वर्ग परिभाषा है
  • * "शून्य या अधिक" दोहराव है

ध्यान दें कि -चरित्र वर्ग परिभाषा में शाब्दिक डैश अंतिम वर्ण है, अन्यथा इसका एक अलग अर्थ (यानी रेंज) है। .यह भी एक अलग अर्थ के बाहर चरित्र वर्ग परिभाषा है, लेकिन अंदर, यह सिर्फ एक शाब्दिक है.

संदर्भ


PHP में

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

<?php

$arr = array(
  'screen123.css',
  'screen-new-file.css',
  'screen_new.js',
  'screen new file.css'
);

foreach ($arr as $s) {
  if (preg_match('/^[\w.-]*$/', $s)) {
    print "$s is a match\n";
  } else {
    print "$s is NO match!!!\n";
  };
}

?>

उपरोक्त प्रिंट ( जैसा कि ideone.com पर देखा गया है ):

screen123.css is a match
screen-new-file.css is a match
screen_new.js is a match
screen new file.css is NO match!!!

ध्यान दें कि पैटर्न थोड़ा अलग है, \wइसके बजाय का उपयोग कर । यह "शब्द चरित्र" के लिए वर्ण वर्ग है।

एपीआई संदर्भ


विनिर्देश पर ध्यान दें

ऐसा लगता है कि आपके विनिर्देशन का पालन किया जा रहा है, लेकिन ध्यान दें कि यह उन चीजों से मेल खाएगा ....., जैसे , आदि, जो आप चाहते हैं या नहीं हो सकती हैं। यदि आप अधिक विशिष्ट हो सकते हैं कि आप किस पैटर्न से मेल खाना चाहते हैं, तो रेगेक्स थोड़ा अधिक जटिल होगा।

उपरोक्त रेगेक्स भी रिक्त स्ट्रिंग से मेल खाता है। यदि आपको कम से कम एक वर्ण की आवश्यकता है, तो पुनरावृत्ति के लिए (शून्य-या-अधिक) के +बजाय (एक-या-अधिक) का उपयोग करें *

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


एक अलग विनिर्देशन के लिए ideone.com/5DMCa भी देखें जो कि आप जो चाहते हैं उससे अधिक हो सकता है। यदि आप मेरे साथ विनिर्देश विकसित करना चाहते हैं तो रूब्युलर पर मेरे साथ आगे और पीछे जाएं।
पॉलीजेन लुब्रिकेंट्स

मैं बवंडर का उपयोग कर रहा हूं और html नामों को कैप्चर करने की आवश्यकता है, इसलिए मैंने आपके उत्तर के आधार पर इसका उपयोग किया; ^/([a-zA-Z0-9._-]*\.html)$
न्यूक्लियरपॉन

मैं एक और नियम जोड़ूंगा जो है: अंतिम वर्ण अल्फ़ान्यूमेरिक होना चाहिए। अपडेटेड रेग्क्स:/[a-zA-Z0-9]+(\.[a-zA-Z0-9]+){2,}[a-zA-Z0-9^]$/
कॉन्स्टा गोरगन

गो (गोलंग) उपयोगकर्ता, सिर, पैटर्न यहाँ falseखाली कच्चे स्ट्रिंग शाब्दिक के लिए परिणाम देगा । खेल का मैदाननीचे दिए गए @ nonopolarity के समाधान का उपयोग करें ।
बेंटकोडर

14

आप उपयोग कर सकते हैं

^[\w\d_.-]+$

+यकीन है कि यह कम से कम 1 चरित्र है बनाने के लिए है। आवश्यकता है ^और $निरूपित करने के लिए शुरू और समाप्त, नहीं तो अगर स्ट्रिंग बीच में एक मैच है, इस तरह के रूप @@@@xyz%%%%में यह अभी भी एक मैच है तो।


3
-सीमा निर्धारित करने से बचने के लिए, पहले सेट में रखें । और \wअल्फ़ान्यूमेरिक्स और अंडरस्कोर को कवर करता है। तो आपको जरूरत है [\w.-]+
रिचर्ड

धन्यवाद, यह मेरे लिए ठीक काम करता है: ^ [\ w \ d _-]] + \ _ (csv | CSV) $
धरम माली

यह गो के (गोलंग) खाली कच्चे स्ट्रिंग शाब्दिकों का भी अनुपालन करता है, जबकि स्वीकृत उत्तर ऐसा नहीं है कि गो उपयोगकर्ता इस समाधान के साथ रहें। खेल का मैदान
बेंटकोडर

8

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

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

स्पष्टीकरण:

  • ^एक स्ट्रिंग की शुरुआत का मिलान करें। यह (प्लस एंड मैच) स्ट्रिंग को सटीक अभिव्यक्ति के अनुरूप बनाने के लिए मजबूर करता है, न कि केवल अभिव्यक्ति के मिलान वाला एक विकल्प होता है।
  • ([a-zA-Z0-9]+[_-])*अंडरस्कोर या डैश के बाद एक या एक से अधिक अक्षरों या संख्याओं का शून्य या अधिक घटनाएँ। यह उन सभी नामों का कारण बनता है जिनमें डैश या अंडरस्कोर होता है जिनके बीच अक्षर या संख्या होती है।
  • [a-zA-Z0-9]+एक या एक से अधिक अक्षर या संख्या। इसमें उन सभी नामों को शामिल किया गया है जिनमें अंडरस्कोर या डैश नहीं है।
  • \.एक शाब्दिक अवधि (डॉट)। फ़ाइल नाम को विस्तार करने के लिए मजबूर करता है और बाकी पैटर्न से बहिष्करण करके, केवल नाम और एक्सटेंशन के बीच की अवधि का उपयोग करने की अनुमति देता है। यदि आप एक से अधिक एक्सटेंशन चाहते हैं जो अंत में सिर्फ डैश / अंडरस्कोर के लिए उसी तकनीक का उपयोग करके नियंत्रित किया जा सकता है।
  • [a-zA-Z0-9]+एक या एक से अधिक अक्षर या संख्या। विस्तार कम से कम एक वर्ण लंबा होना चाहिए और इसमें केवल अक्षर और संख्याएँ होनी चाहिए। यह विशिष्ट है, लेकिन यदि आप अंडरस्कोर की अनुमति चाहते हैं, तो इसे भी संबोधित किया जा सकता है। आप {2,3}एक या एक से अधिक +मिलान करने वाले के बजाय लंबाई सीमा की आपूर्ति कर सकते हैं , यदि वह अधिक उपयुक्त थे।
  • $स्ट्रिंग के अंत का मिलान करें। शुरुआती चरित्र देखें।

6

यह वह पैटर्न है जिसकी आप तलाश कर रहे हैं

/^[\w-_.]*$/

इसका क्या मतलब है:

  • ^ स्ट्रिंग की शुरुआत
  • [...] अंदर पात्रों का मिलान करें
  • \w कोई भी शब्द वर्ण 0-9 a-z A-Z
  • -_.मिलान करें -और _और.
  • * शून्य या अधिक पैटर्न या असीमित
  • $ स्ट्रिंग का अंत

यदि आप वर्णों की राशि को सीमित करना चाहते हैं:

/^[\w-_.]{0,5}$/

{0,5}0-5वर्णों का अर्थ है


var a = / ^ \ w * $ / g a.test ("46545") और परिणाम गलत था
Dipak

1
ध्यान दें कि \wइसमें शामिल है_
hxpax

4

कुछ इस तरह से काम करना चाहिए

$code = "screen new file.css";
if (!preg_match("/^[-_a-zA-Z0-9.]+$/", $code))
{
    echo "not valid";
}

यह "मान्य नहीं" प्रतिध्वनित होगा


2

[A-Za-z0-9_.-]*

यह भी रिक्त स्ट्रिंग मेल होगा यदि आप नहीं है कि विनिमय पिछले चाहते हैं *एक के लिए+

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