2016-06-02 6 views
-1

Ich versuche, die Variablen in einer Zeichenfolge ausgeben zu lassen. Wenn ich das Folgende drucke, formatiert es sich nicht korrekt mit einer neuen Zeile für jeden Titel und jede Variable.Ruby Druckvariable in einem String, Phone Validation

print "User: #{names}\nPhone: #{valid_phone?(number)}\n Email: #{email}" 

Ich erhalte diese Ausgabe:

User: ["john", "doe\n"] Phone: 555-555 
    Email: [email protected] 

Ausgabe sollte wie folgt aussehen:

User: John Doe 
    Phone: (555)555-5555 
    Email: [email protected] 

Ich bin auch nicht die Telefonnummer Ausgabe im Format bekommen (555) 555-5555. Hier ist mein vollständiger Code. Vielen Dank!!

NAME_PATTERN = /([\w\-\']{2,})([\s]+)([\w\-\']{2,})/ 
    EMAIL_PATTERN = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i 
    PHONE_PATTERN = /^(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})$/ 

    def valid_name?(name) 
    !!name.match(NAME_PATTERN) 
    end 

    puts "Enter your first and last name (John Doe): " 

    while (name=gets) 

    names = name.split(" ", 2) 
    if valid_name?(name) 
     puts "Great, that looks like it could work." 
     break 
     else 
     puts "Invalid entry, please enter first and last name. To exit press ctrl+c." 
    end 
    end 

    def valid_email?(email) 
    !!email.match(EMAIL_PATTERN) 
    end 

    puts "Enter your email address ([email protected]): " 

    while (email = gets) 

    if valid_email?(email) 
     puts "Great, that looks like it could work." 
     break 
    else 
     puts "Invalid email address entered. Please try again. To exit press ctrl+c." 
    end 
    end 

    puts "Enter your phone number including area code (numbers only): " 

    def valid_phone?(number) 
    !!number.match(PHONE_PATTERN) 
    number = number.to_s 
    area_code = number.length == 10 ? "(#{number[0..2]}) " : '' 
    office_code = number[-7..-5] 
    specific_line = number[-4..-1] 
    "#{area_code}#{office_code}-#{specific_line}" 
    end 

    while (number=gets) 
     if valid_phone?(number) 
     puts "Great, that looks like it could work." 
    break 
    else 
     puts "Invalid phone number entered. Please try again. To exit press ctrl+c." 
     end 
    end 

    print "User: #{names}\nPhone: #{valid_phone?(number)}\n Email: #{email}" 
+1

Der beste Ansatz beim Veröffentlichen einer Frage besteht darin, den Code auf das absolut notwendige Minimum zu streichen, um das Problem zu demonstrieren. Ich sehe, dass Sie den gleichen immer größer werdenden Codeabschnitt posten. Wenn Sie konzentriert bleiben, können die Menschen Ihr Problem schneller verstehen und haben eine bessere Chance auf eine Antwort. – tadman

Antwort

1

Um die erwartete Ausgabe ersetzt Ihre letzte Zeile (print) mit den folgenden

puts "User: #{names.join(' ')}" 
puts "Phone: #{valid_phone?(number)}" 
puts "Email: #{email}" 

Auch die Zeile number = number.to_s-number = number.chomp

1

bekommen dies Ihr erstes Problem der neuen Linie lösen.

hinzufügen names.join(",") in letzte Zeile unter Wie funktioniert:

print "User: #{names.join(",")}\nPhone: #{valid_phone?(number.chomp)}\nEmail: #{email}" 

aber für die zweite Ausgabe der Telefonnummer, welches Problem Sie haben ?.