2011-04-21 16 views
6

मैं एक स्ट्रिंग जहां सभी पात्रों अपर केस अक्षर हैं के लिए जाँच करने के लिए निम्न कोड का उपयोग कर रहा:कैसे निर्धारित करें कि एक गैर-अंग्रेजी स्ट्रिंग ऊपरी मामले में है या नहीं?

 if (preg_match('/^[\p{Lu}]+$/', $word)) { 

यह अंग्रेजी के लिए अच्छा काम करता है, लेकिन विफल रहता लहजे, रूस पत्र, आदि के साथ पत्र का पता लगाने के क्या \ p {Lu} सभी भाषाओं के लिए काम करना चाहिए? क्या कोई बेहतर दृष्टिकोण है?

+0

मैंने हमेशा सोचा कि '\ p {Lu} 'को सभी यूनिकोड-समर्थित वर्णमाला के लिए काम करना चाहिए था। क्या यह किसी भी सिरिलिक अक्षरों को अपरकेस के रूप में पहचानने में असफल रहा है? –

+1

ठीक है, यह पर्ल में ठीक काम करता है क्योंकि डेटा बाइट डेटा के बजाय डेटा डेटा डेटा है, या यदि यह पैटर्न में यूनिकोड प्रॉपर्टी देखता है तो पर्ल स्वचालित रूप से '/ u' चालू हो जाता है। अफसोस की बात यह प्रतीत होती है कि PHP डिफ़ॉल्ट रूप से यूनिकोड में पीसीआरई का उपयोग नहीं कर रहा है। क्या आप कहीं और, जैसे आप पर्ल में कर सकते हैं? बीटीडब्लू, आप अभी भी यूनिकोड के साथ रेंज में सावधान रहना चाहेंगे यदि यह मामला असंवेदनशील रूप से मेल खाता है, जैसा कि [हमने हाल ही में एक बग तय किया है] (http://www.perlmonks.org/?node_id=900689) उससे संबंधित है। मैंने अभी तक पीसीआरई के साथ समकक्ष परीक्षण नहीं किया है। – tchrist

उत्तर

6

एक विशेष विकल्प/यू जो डिफ़ॉल्ट 8-बिट मिलान मोड के बजाय यूनिकोड मिलान मोड चालू करता है। आपको नियमित अभिव्यक्तियों के लिए/u निर्दिष्ट करना चाहिए जो यूनिकोड वर्ण, graphemes, गुण या स्क्रिप्ट से मेल खाने के लिए \ x {FFFF}, \ X या \ p {L} का उपयोग करें। PHP एएससीआईआई स्ट्रिंग के बजाए यूटीएफ -8 स्ट्रिंग के रूप में '/ regex/u' की व्याख्या करेगा।

http://www.regular-expressions.info/php.html -

+0

उसने ऐसा किया! शीघ्र जवाब देने के लिए ध्न्यवाद। –

0

समारोह का उपयोग कर यू स्ट्रिंग की अपरकेस में परिवर्तन कर सकते हैं .... समारोह यहां उपलब्ध: स्ट्रिंग नाम = "मनीष niitian"; कंसोल। राइटलाइन ("अपरकेस में आपका स्ट्रिंग है:" + name.UPPERCASE());

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