2010-10-14 21 views
9

मैं यह देखने के लिए preg_match का उपयोग कैसे कर सकता हूं कि विशेष वर्ण [^'£$%^&*()}{@:'#~?><>,;@|\-=-_+-¬`] एक स्ट्रिंग में मौजूद है या नहीं?preg_match विशेष वर्ण

+3

"विशेष वर्ण" निर्धारित करें ... –

+0

[^ '£ $%^& *()} {@:'? # ~><>,; @ | \ - = - _ + - ¬'] – stefanosn

+2

आप 'preg_match()' का उपयोग क्यों करना चाहते हैं? यदि आप जो भी कर रहे हैं, इन वर्णों के अस्तित्व की जांच कर रहे हैं, तो क्यों नहीं 'strpos() 'का उपयोग करें? – staticsan

उत्तर

7

[\W]+ किसी भी गैर-शब्द चरित्र से मेल खाएगा।

+0

आपके उत्तर के लिए धन्यवाद लेकिन मुझे केवल विशिष्ट वर्णों की आवश्यकता है जैसे^'£ $%^& *()} {@:' # ~?><>,; @ | \ - = -_ + - ¬' – stefanosn

+0

आम तौर पर मैं 'डी कहें' [\ डब्ल्यू] 'अभी भी आपके लिए सही है, क्योंकि "शब्द चरित्र" किसी भी अक्षर, संख्या या अंडरस्कोर को संदर्भित करता है और बाकी सब कुछ के बारे में बताता है। मुझे यकीन नहीं है कि इसमें हाइफ़न शामिल है या नहीं। तब मैंने देखा कि अंडरस्कोर उन पात्रों की सूची में था जिन्हें आप देखना चाहते हैं। चूंकि आप केवल एकल वर्ण ढूंढना चाहते हैं, इसलिए 'preg_match() 'के बजाय' विस्फोट() 'और' in_array() 'का उपयोग करना तेज हो सकता है, या केवल' while()' लूप का उपयोग करें। हालांकि इनमें से कोई भी बहुत सहज नहीं है। – stevendesu

+0

क्या होगा यदि स्ट्रिंग में यूनिकोड वर्ण है? आपका रेगेक्स उन्हें छोड़ देता है! – Emerald214

9

preg_match का उपयोग करें। यह फ़ंक्शन एक नियमित अभिव्यक्ति (पैटर्न) और विषय स्ट्रिंग में आता है और 1 देता है यदि मिलान हुआ, 0 यदि कोई मिलान नहीं हुआ है, या false कोई त्रुटि हुई है।

$input = 'foo'; 
$pattern = '/[\'\/~`\[email protected]#\$%\^&\*\(\)_\-\+=\{\}\[\]\|;:"\<\>,\.\?\\\]/'; 

if (preg_match($pattern, $input)){ 
    // one or more matches occurred, i.e. a special character exists in $input 
} 

तुम भी झंडे निर्दिष्ट और के लिए भरपाई कर सकते हैं एक रेगुलर एक्सप्रेशन मिलान में प्रदर्शन करना कार्य करते हैं। उपरोक्त दस्तावेज लिंक देखें।

+0

शामिल है क्या व्यक्तिगत प्रतीकों के लिए कोई संदर्भ/लिंक है? – asterisk

3

मेरा कार्य जीवन को आसान बनाता है।

function has_specchar($x,$excludes=array()){ 
    if (is_array($excludes)&&!empty($excludes)) { 
     foreach ($excludes as $exclude) { 
      $x=str_replace($exclude,'',$x);   
     }  
    }  
    if (preg_match('/[^a-z0-9 ]+/i',$x)) { 
     return true;   
    } 
    return false; 
} 

दूसरा पैरामीटर ($ बहिष्कृत) उन मानों के साथ पारित किया जा सकता है जिन्हें आप अनदेखा करना चाहते हैं।

प्रयोग

$string = 'testing_123'; 
if (has_specchar($string)) { 
    // special characters found 
} 

$string = 'testing_123'; 
$excludes = array('_'); 
if (has_specchar($string,$excludes)) { } // false 
संबंधित मुद्दे