2012-02-17 9 views
25

मैं यह जानना चाहता हूं कि किसी स्ट्रिंग में संख्याएं और अक्षर दोनों हैं या नहीं।जांचें कि क्या स्ट्रिंग में संख्याएं और अक्षर

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

  • को देखते हुए PncC1KECj4pPVW, यह एक पाठ फ़ाइल में लिखा जाएगा क्योंकि यह दोनों शामिल हैं।
  • qdEQ दिया गया, ऐसा नहीं होगा, क्योंकि इसमें केवल अक्षर हैं।

क्या ऐसा करने का कोई तरीका है?

मैं

$string = PREG_REPLACE("/[^0-9a-zA-Z]/i", '', $buffer); 

उपयोग करने के लिए कोशिश कर रहा था लेकिन यह काम नहीं किया।

किसी भी मदद की सराहना की जाएगी।

+3

[a-zA-Z] के साथ एक/मैं संशोधक जब आप इसे _sure_ बनाना चाहते के लिए एक अनुलाप –

+0

@MarkBaker के कुछ है केस संवेदी :) –

+2

स्ट्रिंग में होने की अनुमति गैर अक्षरांकीय अक्षर हैं ? –

उत्तर

17
if (preg_match('/[A-Za-z].*[0-9]|[0-9].*[A-Za-z]/', $myString)) 
{ 
    echo 'Secure enough'; 
} 

उत्तर https://stackoverflow.com/a/9336130/315550 के आधार पर अपडेट किया, thnx https://stackoverflow.com/users/116286/jb

+22

@ डंकन, यह केवल तभी काम करेगा जब पत्र संख्याओं से पहले आते हैं। '9877abc' के लिए काम नहीं करेगा। –

+0

धन्यवाद महान काम करता है, मैं समझता हूं कि यह अब कैसे काम करता है। –

+4

यह 'ए 2' या' ए 2' –

6

को इस सफाई से काम करता है:

$myString="abc123"; 
if(preg_match('([a-zA-Z].*[0-9]|[0-9].*[a-zA-Z])', $myString)) 
{ 
    echo('Has numbers and letters.'); 
} else { 
    echo("no"); 
} 

कार्रवाई में यह देखने के लिए, यह कॉपी करें और चिपकाएं: http://phptester.net/index.php?lang=en

+0

यह अक्षरों के बाद-संख्याओं, या संख्या-अक्षरों के लिए काम करता है। हालांकि, यह अन्य पात्रों की अनुमति देता है (क्योंकि आपने पोस्ट में उन्हें बाहर करने के लिए नहीं कहा था)। –

+0

गैर-अल्फान्यूमेरिक्स के लिए अपडेट किया गया। –

+0

आपके गैर-अल्फान्यूमेरिक संस्करण ने मुझे छोड़ दिया है। अगर मैं बीच में एक संख्या चाहता हूं तो क्या होगा? –

0

हैं आप से मिलान करना चाहते हैं केवल अल्फान्यूमेरिक वर्ण (यानी, स्ट्रिंग पर विचार करें जैसे ही इसमें कुछ और है, जैसे रिक्त स्थान या विशेष वर्ण), यह काम करना चाहिए।

अन्यथा, केवल पहले preg_match() को हटा दें।

function myTest($string) 
{ 
    echo "test '".$string."': " 
    . intval(preg_match('/^[a-z\d]+$/i', $string) // has only chars & digits 
     && preg_match('/[a-z]/i', $string)  // has at least one char 
     && preg_match('/\d/', $string))   // has at least one digit 
    . "\n"; 
} 

myTest('aAa'); // => 0 
myTest('111'); // => 0 
myTest('aAa111bbb'); // => 1 
myTest('111aAabbb'); // => 1 
myTest('aAabbb111'); // => 1 
myTest('111bBb222'); // => 1 
myTest('111 bBb 222'); // => 0 
myTest('$$$$'); // => 0 
40

ऐसा लगता है कि यह दो रेगेक्स में ऐसा करने का सबसे आसान तरीका है।

if (preg_match('/[A-Za-z]/', $myString) && preg_match('/[0-9]/', $myString)) 
{ 
    echo 'Contains at least one letter and one number'; 
} 

मुझे लगता है कि ऐसा करने का एक और तरीका यह नीचे है। यह कहता है "एक पत्र और फिर बाद में किसी बिंदु पर एक संख्या (या इसके विपरीत)"। लेकिन ऊपर वाला एक आईएमओ पढ़ने में आसान है।

if (preg_match('/[A-Za-z].*[0-9]|[0-9].*[A-Za-z]/', $myString)) 
{ 
    echo 'Contains at least one letter and one number'; 
} 
+0

@Downvoter, क्या आप कृपया समझा सकते हैं? –

+0

मैंने डाउनवॉट नहीं किया है, लेकिन आपके पहले और दूसरे समाधान "000 aaaa 111" से मेल खाते हैं, जो मुझे लगता है कि वैध नहीं माना जाना चाहिए (केवल "000aaaa111" आदि, स्ट्रिंग में अल्फान्यूमेरिक से अन्य वर्ण नहीं होना चाहिए) - हालांकि ओपी ने यह निर्दिष्ट नहीं किया कि "000 aaaa 111" को अमान्य माना जाना चाहिए, लेकिन दिए गए उदाहरण उस व्यवहार का सुझाव दे रहे हैं। –

+0

@ फ्रॉस्टीज़ आप काफी सही हैं लेकिन सवाल यह नहीं कहता कि इसमें कोई अन्य वर्ण नहीं होना चाहिए। मैंने प्रश्न के उत्तर के रूप में उत्तर दिया। –

7

मेरा एकमात्र प्रश्न यह है कि क्या एक regexp होना चाहिए। मैं दो या तीन के साथ जाऊंगा (क्योंकि आपको इसे एक बार में करने के लिए थोड़ा जटिल रेगेक्सपी बनाना होगा।

मान लीजिए कि आप के लिए आवश्यकता होती है दो:

  • कम से कम एक अपर केस चरित्र [A-Z]
  • कम से कम एक लोअर केस वर्ण [a-z]
  • कम से कम एक संख्या \d
  • कम से कम पासवर्ड है 7 वर्ण लंबा

आसान टी और सबसे प्रभावी समाधान:

  • [a-z][A-Z]+\d
  • [a-z]\d+[A-Z]
  • [A-Z][a-z]+\d
  • [A-Z]\d+[a-z]
  • \d[a-z]+[A-Z]:

    if(preg_match('~[A-Z]~', $password) && 
        preg_match('~[a-z]~', $password) && 
        preg_match('~\d~', $password) && 
        (strlen($password) > 6)){ 
        echo "Good password"; 
    } else { 
        echo "Not so much"; 
    } 
    

    अन्यथा, एक regexp में आप कई विकल्पों पर विचार करना होगा

  • ~([a-z][A-Z]+\d|[a-z]\d+[A-Z]|[A-Z][a-z]+\d|[A-Z]\d+[a-z]|\d[a-z]+[A-Z]|\d[A-Z]+[a-z])~ 
    

    कोर्स (जब बस की आवश्यकता होगी, ऊपरी जाँच और लोअर केस) आप के साथ जा सकते हैं की:

  • \d[A-Z]+[a-z]

की तरह एक बड़ा और शायद ही पठनीय "ored" regexp में शामिल हों

preg_match('~([a-z][A-Z]|[a-z][A-Z])~'); 

और अभी भी मैन्युअल रूप से लंबाई की जांच करनी है। दूसरा समाधान मुझे अप्रभावी और मुझे पढ़ने में मुश्किल लगता है। मेरी सिफारिश: पहले के साथ जाओ।

0

जांचने के लिए कि क्या स्ट्रिंग संख्याएं हैं या नहीं !!

function ContainsNumbers($String){ 
    return preg_match('/\\d/', $String) > 0; 
} 
0

आप कई भाषाओं, पीएचपी से 5.1 अतिरिक्त भागने दृश्यों का समर्थन करने की जरूरत है चरित्र प्रकार listed here के लिए जोड़ा गया था।

निम्नलिखित कार्य इस का लाभ उठाने और आप एक से अधिक अक्षर में अक्षर और अंक के लिए जांच करने की अनुमति:

चेक किसी भी अक्षर वाली स्ट्रिंग में मौजूद है:

function has_letter($x){ 
    if (preg_match("/[\p{L}]/u",$x)) { 
      return true; 
    } 
    return false; 
} 

जांच स्ट्रिंग किसी भी संख्या

शामिल
function has_number($x) { 
    if (preg_match("/[\p{N}]/u",$x)) { 
     return true; 
    } 
    return false; 
} 

प्रयोग

$string = '123اختبا'; 
has_letter($string); // true 


$string = '೪౨౨'; 
has_number($string); // true 

दोनों एक साथ अनुरोध किया

$string='I am 28'; 
if (has_letter($string)&&has_number($string)){ 
    // true 
} 

$string='I am ౨೩೫'; 
if (has_letter($string)&&has_number($string)){ 
    // true 
} 

$string='Привет, друг, как ты?'; 
has_number($string); // false - this Russian text doesn't contain a number 
-2

अरे यहाँ नीचे कुछ दिशा निर्देश हैं:

मुद्दा: स्ट्रिंग उदा के लिए अंदर अंकों पर कोई मान्यता

OM 4 OM, OM4OM , space OM 4 OM space, space OM4OM space. -----> No valdation over this?? 

समाधान:

if (preg_match("/[A-Za-z].*[0-9]/",$_POST["name"])) 
    { 
    header("location:http://localhost/Test1.html"); 
    exit; 
    } 
Logic: /[A-Za-z].*[0-9]/ 

यह कुछ बिन्दु संख्या में पहले वर्ण और फिर कहते हैं।

4

PHP के लिए एक अंतर्निहित कार्य है। इसे ctype_alnum कहा जाता है।

if(!ctype_alnum($string)) { 
    return $error; 
} 
// Continue on your way... 
+1

यह एक अच्छा काम है। हालांकि, यह ओपी का जवाब नहीं देता है क्योंकि यह केवल तभी जांचता है जब स्ट्रिंग में अक्षर या संख्याएं हों। यह स्ट्रिंग में दोनों मान्य नहीं है। – butlerblog

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