आपको बचने की जरूरत नहीं है -
चरित्र वर्गों के अंदर जब आप इसे पहली या अंतिम स्थिति में रखते हैं, क्योंकि इसे इस तरह से श्रेणी के रूप में गलत नहीं पढ़ा जा सकता है:
[\- ]
-> [- ]
[\d\- ]
-> [\d -]
जिस तरह से आपके पास यह ऊपरी सीमा है 10
अंत में व्यर्थ है।$
जोड़ें अंत में अनुत्तरित वर्णों को अस्वीकार करने के लिए।
या \D
पिछले अंकों . को अनुमत करने के लिए (लेकिन एक गैर-अंक की आवश्यकता है)।
या ($|\D)
या तो स्ट्रिंग को वहीं समाप्त करने के लिए या एक गैर-अंकीय अनुसरण करने के लिए।
एक साथ रखें:
SELECT '+79637434199' ~ '^(8|\+7)[ -]?(\(?\d{3}\)?[ -]?)[\d -]{7,10}($|\D)'
अन्यथा आपकी अभिव्यक्ति ठीक है और यह मेरे लिए PostgreSQL 9.1.4 पर काम करती है। इससे कोई फर्क नहीं पड़ना चाहिए कि आप इसे WHERE
. में उपयोग करते हैं या नहीं खंड या SELECT
. में सूची - जब तक कि आप कुछ पुराने संस्करण (जैसे टिप्पणियों में सुझाए गए @kgrittn) के साथ बग में नहीं चल रहे हों।
अगर मैं स्ट्रिंग अक्षर को E
. के साथ जोड़ दूं , मैं आपको मिलने वाले त्रुटि संदेश को भड़का सकता हूं। यह नहीं अपनी समस्या की व्याख्या करें, क्योंकि आपने कहा था कि अभिव्यक्ति SELECT
. के रूप में ठीक काम करती है आइटम।
लेकिन, जैसा कि शर्लक होम्स ने उद्धृत किया है, "जब आपने असंभव को छोड़ दिया है, तो जो कुछ भी बचा है, चाहे वह कितना भी असंभव हो, सत्य होना चाहिए।"
हो सकता है कि आपने standard_conforming_strings = on
और दूसरा standard_conforming_strings = off
. के साथ - यह 9.1 से पहले पुराने संस्करणों में स्ट्रिंग अक्षर की डिफ़ॉल्ट व्याख्या थी। हो सकता है कि दो अलग-अलग क्लाइंट के साथ (जिसकी सेटिंग अलग हो)।
अध्याय में और पढ़ें स्ट्रिंग स्थिरांक सी-स्टाइल एस्केप के साथ मैनुअल में।