2009-07-16 11 views
9

मैं अपने उपयोगकर्ताओं को मान्य करना चाहता हूं, इसलिए वे केवल अपने उपयोगकर्ता नाम में ए-जेड और - का उपयोग कर सकते हैं।मान्य करें: केवल अक्षरों, संख्याओं और -

validates_format_of :username, :with => /[a-z]/ 

हालांकि इस नियम भी रिक्त स्थान ._ @

Username should use only letters, numbers, spaces, and [email protected] please. 

कोई भी विचार की अनुमति देता है?

सर्वश्रेष्ठ संबंध। Asbjørn Morell

+0

यह है कि मैं क्या लेकर आए हैं के साथ =>/^ [- az \ घ _] + $/ – atmorell

+0

आप एक जवाब है, तो जो आपकी समस्या हल करता है, आपको इसे स्वीकार किए जाने के रूप में चिह्नित करना चाहिए। –

उत्तर

3

[] कई "नियम" हो सकती है इसलिए [एक-Z0-9] छोटे अक्षरों और संख्याओं

विशेष वर्ण देता है - नियम

करता है के शुरू में जाना चाहिए

[[email protected]_.] 

जो प्रभाव आप चाहते हैं उसे देते हैं?

+0

[-A-Za-z0-9 @ _।] <- अपरकेस के साथ, बस मामले में। – beggs

+0

उसने केवल ए-जेड के लिए पूछा ;-) – djna

+0

मैं इसे असंवेदनशील के रूप में चिह्नित करता हूं। – Svish

16

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

validates_format_of :username, :with => /^[-a-z]+$/ 

तुम भी \ एक साथ बदलने के लिए^आवश्यकता हो सकती है और $ \ जेड के साथ, आप में एक नई पंक्ति मिलान करने के लिए नहीं करना चाहते हैं शुरूआत समाप्ति। (BaroqueBobcat के लिए धन्यवाद)

एक संलग्न करने से यह केस-असंवेदनशील तरीके से मेल खाता है। (Omar Qureshi के लिए धन्यवाद)।

(मैं भी मूल रूप से दूर छोड़ दिया +: धन्यवाद Chuck करने के लिए)

+5

सहमत हैं लेकिन/^ [- a-z] $/i के मामले में असंवेदनशीलता –

+0

आप उदाहरण हमेशा अमान्य लौटते हैं:/ – atmorell

+0

इसे irb में परीक्षण करें .. re =/^ [- a-z] $/i; "foo" = ~ re –

0

, बस नियमित अभिव्यक्ति सभी पात्रों आपके विनिर्देशन राज्यों (\w सब अक्षरांकीय वर्णों को शामिल किया गया - अक्षर और संख्या - और एक अंडरस्कोर) के अनुरूप परिवर्तन ।

validates_format_of :username, :with => /[\w \.\[email protected]]+/ 
+0

आपका उदाहरण बहुत करीब है हालांकि उपयोगकर्ता अभी भी उपयोग कर सकता है। और रिक्त स्थान। मेरा ....... नया उपयोगकर्ता – atmorell

+0

लंबी स्ट्रिंग मिलान को रोकने के लिए यहां कोई सीमा नहीं है। यह किसी भी स्ट्रिंग से मेल खाएगा जिसमें मिलान किए गए वर्णों में से कम से कम एक शामिल है। –

1
validates_format_of :username, :with => /^[\w\[email protected]]*$/ 

नोट *, '0 या अधिक'

+0

वही समस्या ... रिक्त स्थान और। अभी भी अनुमति है:/ – atmorell

9

अधिक जटिल समाधान लेकिन पुन: प्रयोज्य और अधिक ठीक छोटाबीजवाला त्रुटि संदेश के साथ, जिसका मतलब है।

कस्टम सत्यापनकर्ता:

एप्लिकेशन/प्रमाणकों/username_convention_validator.rb

class UsernameConventionValidator < ActiveModel::EachValidator 
    def validate_each(record, field, value) 
    unless value.blank? 
     record.errors[field] << "is not alphanumeric (letters, numbers, underscores or periods)" unless value =~ /^[[:alnum:]._-]+$/ 
     record.errors[field] << "should start with a letter" unless value[0] =~ /[A-Za-z]/ 
     record.errors[field] << "contains illegal characters" unless value.ascii_only? 
    end 
    end 
end 

(सूचना यह अनुमति नहीं है - और गैर ascii अनुमति does not, पूर्णता खातिर '_।')

उपयोग:

validates_format_of: उपयोगकर्ता नाम,:

एप्लिकेशन/मॉडल/user.rb

validates :name, 
    :presence => true, 
    :uniqueness => true, 
    :username_convention => true 
+1

अच्छा जवाब - यह अतिरिक्त मील चला जाता है। –

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

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