2014-10-20 7 views
7

मैं सिवाय एक स्ट्रिंग से एक तार से सभी पात्रों पट्टी कोशिश कर रहा हूँ:रेगुलर एक्सप्रेशन पीएचपी

  • अक्षरांकीय अक्षर
  • डॉलर चिह्न ($)
  • अंडरस्कोर (_)
  • कोड अंक U+0080 और U+FFFF
के बीच यूनिकोड वर्ण

preg_replace('/[^a-zA-Z\d$_]+/', '', $foo); 

मैं चौथी शर्त मिलान के बारे में कैसे जाना है: ३६९१३६३२१०

मैं ऐसा करने से पहले तीन की स्थिति मिल गया है? I looked at using \X लेकिन 65000+ वर्णों को सूचीबद्ध करने से बेहतर तरीका होना चाहिए।

उत्तर

15

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

$foo = preg_replace('/[^\w$\x{0080}-\x{FFFF}]+/u', '', $foo); 
  • \w - [a-zA-Z0-9_]
  • \x{0080}-\x{FFFF} के बराबर कोड अंक के बीच वर्णों से मेल करने के लिए regex में यूनिकोड समर्थन के लिए U + FFFF`
  • /u है
+0

हाँ कुछ एक्सा चूहों से ओपी से यह अधिक स्पष्ट हो जाएगा, मुझे विश्वास है कि – anubhava

+1

शुरू में मैं '\ w' पर झिझक गया क्योंकि मुझे यकीन नहीं था कि लोकेल-विशिष्ट मिलान चीजों को प्रभावित करेगा, लेकिन ऐसा लगता है कि यूनिकोड रेंज में उच्चारण वर्णों को शामिल किया गया है, इसलिए मुझे लगता है कि यह सुरक्षित है । '/ U' जो मैं खोज रहा हूं, धन्यवाद। एक तरफ ध्यान दें, एक अकेला सरोगेट क्या है? –

+1

@ rink.attendant.6: यूटीएफ -16 में सरोगेट निर्दिष्ट करने के लिए 'd800' से' dfff' की एक सीमा है ताकि अधिक वर्ण निर्दिष्ट किए जा सकें। एक भी सरोगेट यूटीएफ -16 में एक मान्य चरित्र नहीं है (एक जोड़ी एक वैध चरित्र निर्दिष्ट करने के लिए आवश्यक है)। अगर पीसीआरआरई स्ट्रिंग में एकमात्र सरोगेट का सामना करता है तो मुझे कोई याद नहीं आती है। – nhahtdh

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