2011-07-20 12 views
7

मैं रूबी 3.0.9 पर रूबी का उपयोग कर रहा हूं और मैं एक स्ट्रिंग को सत्यापित करना चाहता हूं जिसमें केवल वर्ण हो (विशेष वर्ण नहीं - केस असंवेदनशील) , रिक्त स्थान और संख्याएं।रेगेक्स को स्ट्रिंग को सत्यापित करने के लिए केवल वर्ण (विशेष वर्ण नहीं), रिक्त स्थान और संख्या

मेरी सत्यापन कोड में मेरे पास है:

validates :name, 
    :presence => true, 
    :format  => { :with => regex } # Here I should set the 'regex' 

मैं कैसे regex लिखा होना चाहिए?

उत्तर

18

ऐसा करने के कुछ तरीके हैं। आप केवल अनुमति देना चाहते हैं ASCII शब्द वर्ण (Ӕ या ל जैसे अन्य अक्षर से ई की तरह कोई उच्चारण चिह्न वर्ण या अक्षर), इस का उपयोग करें:

/^[a-zA-Z\d\s]*$/ 

आप के लिए अन्य भाषाओं से केवल संख्या और अक्षरों अनुमति देना चाहते हैं रूबी 1.8.7, इस का उपयोग करें:

/^(?:[^\W_]|\s)*$/u 

आप रूबी 1.9.x के लिए अन्य भाषाओं से केवल संख्या और अक्षरों की अनुमति देना चाहते हैं, तो इस का उपयोग करें:

^[\p{Word}\w\s-]*$ 

इसके अलावा, अगर आप पर रूबी में यूनिकोड समर्थन के साथ 1.9.x regex का उपयोग करने के लिए योजना बना रहे हैं, अपने .rb फ़ाइल की शुरुआत में इस पंक्ति जोड़ें:

# coding: utf-8 
+7

http://rubular.com पर अपने regexp का परीक्षण करना सुनिश्चित करें। –

+0

@ ream88 - धन्यवाद; '\ p {एल}' संस्करण को हटाने के लिए संपादित किया गया। यह मेरे लिए मैला था कि इतनी छोटी रेगेक्स से जांच न करें। '\ P {एल}' काम नहीं करता है - क्यों? क्या यह रूबी रेगेक्स में समर्थित नहीं है? यह .NET में ठीक काम करता है। –

+1

@ जस्टिन मॉर्गन - और स्ट्रिंग में ए, è, é, ò, ... जैसे उच्चारण वर्णों को मान्य करने के बारे में क्या? – Backo

1

आप के लिए देख रहे:

[a-zA-Z0-9\s]+

+ एक या अधिक तो यह रिक्त स्ट्रिंग से मेल नहीं करेंगे कहते हैं। यदि आपको उन्हें मिलान करने की आवश्यकता है, तो + के स्थान पर * का उपयोग करें।

+0

या भी कम, [\ w \ s] – eugen

+0

के लिए ... यह सोचते हैं कि गैर- ASCII वर्ण की अनुमति नहीं है .. –

+0

@ यूजीन - इससे '_' की अनुमति होगी। –

0

क्या कहा गया है के अलावा , अपने नियंत्रण इस में अपने रेगुलर एक्सप्रेशन से चर करने के लिए नियमित रूप से expresion किसी अन्य को उदाहरण

regex = ^[a-zA-Z\d\s]*$ 
संबंधित मुद्दे