2013-10-27 7 views
5

मुझे एक ऐसा फ़ंक्शन चाहिए जो जांचता है कि कोई सरणी आइटम में एक स्ट्रिंग है या नहीं। जैसे:क्या सरणी में स्ट्रिंग का हिस्सा होता है?

array(1 => 'Super-user', 'Root', 'Admin', 'Administrator', 'System', 'Website', 'Owner', 'Manager', 'Founder'); 

और फिर admin12 के लिए जाँच admin12 (admin) के एक भाग के रूप में सच लौट जाना भी सरणी का एक हिस्सा है।

मैं इतनी दूर आया:

$forbiddennames= array(1 => 'Super-user', 'Root', 'Admin', 'Administrator', 'System', 'Website', 'Owner', 'Manager', 'Founder');  

if(in_array(strtolower($stringtocheck), array_map('strtolower', $forbiddennames))){ 
     echo '"This is a forbidden username."'; 
    } else { 
     echo 'true'; 
    } 
} 

केवल यह केवल इको "यह एक वर्जित उपयोगकर्ता नाम है।" जब मैं admin की जांच करता हूं। मैं admin12 की जांच करते समय भी गूंजना चाहता हूं।

क्या यह संभव है (और कैसे)?

+2

मुझे नहीं लगता कि इस http://stackoverflow.com/questions/4366730/how वाली डुप्लिकेट का ज्यादा है -to-check-if-a-string-include-specific-words-string की स्ट्रिंग में निश्चित रूप से केवल एक स्ट्रिंग की तुलना में अलग-अलग गुण होते हैं, और मैं इसे regexp के साथ करने में देख रहा हूं। इस पर कोई "डुप्लिकेट के रूप में चिह्नित" कैसे हो सकता है? – guaka

उत्तर

5

लूप $forbiddennames सरणी के माध्यम से और stripos का उपयोग करता है, तो दिए गए इनपुट स्ट्रिंग किसी भी सरणी में आइटम के से मेल खाता है की जाँच करने के:

function is_forbidden($forbiddennames, $stringtocheck) 
{ 
    foreach ($forbiddennames as $name) { 
     if (stripos($stringtocheck, $name) !== FALSE) { 
      return true; 
     } 
    } 
} 

और नीचे की तरह उपयोग:

if(is_forbidden($forbiddennames, $stringtocheck)) { 
    echo "This is a forbidden username."; 
} else { 
    echo "True"; 
} 

Demo!

+0

यह "admin12" को सही गूंजने की अनुमति देता है, जबकि मैं इसे "यह एक है ..." को प्रतिबिंबित करना चाहता हूं क्योंकि "admin12" (इनपुट) में "व्यवस्थापक" (f.n. array से) होता है। – Isaiah

+0

@ इसायाह: यह मेरे हिस्से से मामूली गलती थी। मैंने गलती से 'स्ट्रिप्स() 'के लिए पैरामीटर को स्विच किया। कृपया अद्यतन उत्तर देखें (और [डेमो] (https://eval.in/57770)) –

+0

हाँ, आप सही हैं! – Isaiah

2

यह वास्तव में कोई फर्क नहीं पड़ता कि आप array_map, foreach या कभी उपयोग करते हैं अलग अलग है। संभावित समाधान:

$forbiddenNames = array('admin', 'bannedName'); 
$input = 'Admin12'; 
$allowed = true; 
foreach($forbiddenNames as $forbiddenName) { 
    if(stripos($input, $forbiddenName) !== false) { 
     echo $input, ' is invalid'; 
     $allowed = false; 
     break; 
    } 
} 
if($allowed === true) { 
    echo $input, ' is valid'; 
} 
+0

साथ ही काम करता है, धन्यवाद! – Isaiah

2

आप PHP के स्ट्रॉप्स 'फ़ंक्शन चाहते हैं। प्रत्येक सरणी तत्व के माध्यम से लूप, और उसके बाद के खिलाफ प्रत्येक तत्व की जांच 'strpos' PHP strpos reference

foreach($forbiddennames as $fn){ 
if(strpos($stringtocheck,$fn)){ 
    //found it! 
}else{ 
    //not found! 
} 
} 
+0

यदि कोई अमान्य नाम मिलने के बाद तोड़ने की संभावना है, तो आप पूरे सरणी से क्यों जाते हैं? – Rangad

+0

'स्ट्रिप्स' बेहतर है यदि आप केस-असंवेदनशील खोज चाहते हैं। मैं इसे 'स्ट्रॉप्स' पर इस्तेमाल करूंगा, लेकिन कोड नमूना मूल रूप से वही –

+1

@ क्रिसवेसन होगा: यह अलग है। मुझे लगता है कि आपका मतलब 'स्ट्रिपोज़() '(एक' आर' के साथ) :) –

3
foreach ($forbiddennames as $forbiddenname) { 
    $nametocheck = strtolower($stringtocheck); 
    if(strpos($stringtocheck, $forbiddenname) !== false) { 
     echo "This is a forbidden username."; 
     break; 
    } 
} 
+0

आपको जांच करनी चाहिए! ==, यदि मैच मिल जाता है तो स्ट्रॉप्स भी 0 लौटा सकता है – Rangad

+0

हाँ, बिल्कुल सही – Ash

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