जवाबों:
लगता है जैसे आप लगभग जानते थे कि आप पहले से ही क्या करना चाहते थे, आपने मूल रूप से इसे एक रेक्स के रूप में परिभाषित किया।
preg_replace("/[^A-Za-z0-9 ]/", '', $string);
preg_replace('/[^A-Za-z0-9 ]/', '', $string);
यूनिकोड वर्णों के लिए, यह है:
preg_replace("/[^[:alnum:][:space:]]/u", '', $string);
\w
शामिल है \d
और इसलिए \d
अनावश्यक है। इसके अलावा, यह गलत है क्योंकि यह परिणामी स्ट्रिंग (जिसमें यह भी शामिल है \w
) में अंडरस्कोर को छोड़ देगा ।
i
झंडा वास्तव में आवश्यक है क्योंकि [:alnum:]
पहले से ही दोनों मामलों को शामिल किया गया है?
नियमित अभिव्यक्ति आपका जवाब है।
$str = preg_replace('/[^a-z\d ]/i', '', $str);
i
केस संवेदी लिए खड़ा है।^
का मतलब है, के साथ शुरू नहीं करता है। \d
किसी भी अंक से मेल खाता है। a-z
a
और के बीच सभी पात्रों से मेल खाता है z
। की वजह से i
पैरामीटर आपको यह निर्दिष्ट करने की जरूरत नहीं है a-z
और A-Z
।\d
एक जगह होने के बाद , इस रेगेक्स में रिक्त स्थान की अनुमति है।यहाँ उस के लिए एक बहुत ही सरल रेगीक्स है:
\W|_
और इसका उपयोग तब किया जाता है जब आपको इसकी आवश्यकता होती है (आगे /
स्लैश सीमांकक के साथ)।
preg_replace("/\W|_/", '', $string);
इस महान उपकरण के साथ इसका परीक्षण करें जो बताता है कि रेगेक्स क्या कर रहा है:
/u
ध्वज की आवश्यकता है अन्यथा गैर-एससीआई पत्र भी हटा दिए जाते हैं।
[\W_]+
यदि आपको विशिष्ट AZ के बजाय अन्य भाषाओं का समर्थन करने की आवश्यकता है, तो आप निम्नलिखित का उपयोग कर सकते हैं:
preg_replace('/[^\p{L}\p{N} ]+/', '', $string);
[^\p{L}\p{N} ]
एक उपेक्षित को परिभाषित करता है (यह उस चरित्र से मेल खाएगा जो परिभाषित नहीं है):
\p{L}
: किसी भी भाषा का एक पत्र ।\p{N}
: किसी भी स्क्रिप्ट में एक संख्यात्मक चरित्र ।
: एक अंतरिक्ष पात्र।+
लालच में चरित्र वर्ग 1 और असीमित समय के बीच मेल खाता है ।यह अन्य भाषाओं और लिपियों के साथ-साथ AZ से अक्षरों और संख्याओं को संरक्षित करेगा:
preg_replace('/[^\p{L}\p{N} ]+/', '', 'hello-world'); // helloworld
preg_replace('/[^\p{L}\p{N} ]+/', '', 'abc@~#123-+=öäå'); // abc123öäå
preg_replace('/[^\p{L}\p{N} ]+/', '', '你好世界!@£$%^&*()'); // 你好世界
नोट: यह एक बहुत पुराना, लेकिन अभी भी प्रासंगिक प्रश्न है। मैं विशुद्ध रूप से पूरक जानकारी प्रदान करने के लिए जवाब दे रहा हूं जो भविष्य के आगंतुकों के लिए उपयोगी हो सकता है।
[\W_]+
$string = preg_replace("/[\W_]+/u", '', $string);
यह सभी AZ, az, 0-9 का चयन करें और इसे हटा दें।
यहां देखें उदाहरण: https://regexr.com/3h1rj
\W
\w
जिसका विलोम अक्षर है A-Za-z0-9_
। तो \W
किसी भी चरित्र से मेल खाएगा जो कि नहीं है A-Za-z0-9_
और उन्हें हटा दें। []
एक है वर्ण सेट सीमा । +
एक वर्ण सेट सीमा पर अनावश्यक है लेकिन आम तौर पर 1 या अधिक चरित्र का मतलब है। u
झंडा अभिव्यक्ति का विस्तार यूनिकोड चरित्र समर्थन शामिल करने के लिए, यह इस तरह के रूप में चरित्र कोड 255 परे पात्रों को नहीं निकाला जाएगा, जिसका अर्थ है ª²³µ
। यूनिकोड और एससीआई पात्रों के साथ विभिन्न usages 3v4l.org/hSVV5 का उदाहरण ।
preg_replace("/\W+/", '', $string)
आप इसे यहाँ देख सकते हैं: http://regexr.com/
मैं भी उत्तर की तलाश में था और मेरा इरादा हर गैर-अल्फा को साफ करने का था और एक से अधिक स्थान नहीं होने चाहिए।
तो, मैंने इस पर एलेक्स के उत्तर को संशोधित किया, और यह मेरे लिए काम कर रहा है
preg_replace('/[^a-z|\s+]+/i', ' ', $name)
। ऊपर रेगेक्स
स्पष्टीकरण में बदल sy8ed sirajul7_islam
गया sy ed sirajul islam
: रेगेक्स मामले में असंवेदनशील तरीके से या एक से अधिक श्वेत रिक्त स्थान पर किसी भी व्यक्ति को जेड से चेक नहीं करेगा , और इसे एक एकल में बदल दिया जाएगा। अंतरिक्ष।
आप स्ट्रिंग को वर्णों में विभाजित कर सकते हैं और इसे फ़िल्टर कर सकते हैं।
<?php
function filter_alphanum($string) {
$characters = str_split($string);
$alphaNumeric = array_filter($characters,"ctype_alnum");
return join($alphaNumeric);
}
$res = filter_alphanum("a!bc!#123");
print_r($res); // abc123
?>
preg_replace()
कॉल की तुलना में वास्तव में अनाकर्षक लगता है ।