13 Stimmen

Validieren: Nur Buchstaben, Zahlen und -

Ich möchte meine Benutzer validieren, damit sie in ihrem Benutzernamen nur a-z und - verwenden können.

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

Diese Regel erlaubt jedoch auch Leerzeichen ._@

Der Benutzername sollte bitte nur Buchstaben, Zahlen, Leerzeichen und .-_@ verwenden.

Irgendwelche Ideen?

Beste Grüße. Asbjørn Morell

18voto

Matthew Schinckel Punkte 33617

Sie müssen möglicherweise sagen, dass der gesamte String übereinstimmen muss:

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

Sie müssen auch ^ durch \A und $ durch \Z ersetzen, wenn Sie nicht möchten, dass ein Zeilenumbruch am Anfang/Ende übereinstimmt. (Dank an BaroqueBobcat)

Das Anhängen eines i sorgt dafür, dass es in einer nicht unterscheidenden Weise übereinstimmt. (Dank an Omar Qureshi).

(Ich habe auch ursprünglich das + weggelassen: Dank an Chuck)

12voto

laffuste Punkte 14777

Äußerst komplexe Lösung, aber wiederverwendbar und mit feiner abgestufter Fehlermeldung.

Benutzerdefinierter Validator:

app/validators/username_convention_validator.rb

class UsernameConventionValidator < ActiveModel::EachValidator
  def validate_each(record, field, value)
    unless value.blank?
      record.errors[field] << "ist nicht alphanumerisch (Buchstaben, Zahlen, Unterstriche oder Punkte)", es sei denn, der Wert entspricht /^[[:alnum:]._-]+$/ nicht
      record.errors[field] << "sollte mit einem Buchstaben beginnen", es sei denn, der Wert[0] entspricht /[A-Za-z]/
      record.errors[field] << "enthält ungültige Zeichen", es sei denn, der Wert.asci_only?
    end
  end
end

(Beachten Sie, dass es ' . - _ ' erlaubt und nicht ascii-zulässig ist, um die Vollständigkeit zu gewährleisten)

Verwendung:

app/models/user.rb

validates: name,
    :Präsenz => true,
    :Einzigartigkeit => true,
    :username_convention => true

4voto

djna Punkte 53789

Die [] können mehrere "Regeln" enthalten, so gibt [a-z0-9] Kleinbuchstaben und Zahlen

Das Sonderzeichen - muss am Anfang der Regel stehen

gibt das gewünschte Ergebnis?

[-a-z0-9@_.] 

den gewünschten Effekt?

2voto

Codebeef Punkte 42570
validates_format_of :username, :with => /^[\w\-@]*$/

Beachten Sie das *, das bedeutet '0 oder mehr'

0voto

Damir Zekić Punkte 15070

Ändern Sie einfach den regulären Ausdruck so, dass er alle Zeichen abgleicht, die in Ihrer Spezifikation angegeben sind (\w deckt alle alphanumerischen Zeichen - Buchstaben und Zahlen - und einen Unterstrich ab).

validates_format_of :username, :with => /[\w \.\-@]+/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X