2012-03-09 13 views
7

Chcę wymusićjavascript regex (walidacji nazwa_użytkownika)

  1. Imię wejściowy powinien zawiera tylko znaki az, AZ i -
  2. login wejściowy powinien zawiera tylko znaki alfanumeryczne

Jak ograniczyć obie reguły w javascript?

Poniżej znajduje się mój kod (jsp) dla nazwy użytkownika regex. Ale to nie działa poprawnie.

function validateForm(){ 
    var nameRegex = /^[a-zA-Z\-]+$/; 
    var validfirstUsername = document.frm.firstName.value.match(nameRegex); 
    if(validUsername == null){ 
     alert("Your first name is not valid. Only characters A-Z, a-z and '-' are acceptable."); 
     document.frm.firstName.focus(); 
     return false; 
    } 
} 

Dzięki!

+0

Jaka jest różnica między * loginem * i * loginem *? Co jest nie tak z tym, co masz (oprócz niespójnego nazewnictwa)? –

+0

@JasonMcCreary Jeden to imię, a drugi to nazwa logowania. Używając powyższego kodu, jeśli używam horatio2m jako wejścia imienia, użytkownik może być nadal zapisany, co nie jest tym, czego chcę. Chcę sprawdzić, czy dane wejściowe powinny zawierać tylko a-z, A-Z i - –

+1

Zastąpić 'if (validUsername == null) {' z 'if (validfirstUsername == null) {'. –

Odpowiedz

14

Kod, który masz dobrze wygląda, oprócz niespójnej referencji zmiennej (patrz komentarz: Josh Purvis).

Następujące regex jest w porządku na swoje imię specyfikacji:

var nameRegex = /^[a-zA-Z\-]+$/; 

Dodawanie cyfry czeku nazwę użytkownika jest prosta:

var usernameRegex = /^[a-zA-Z0-9]+$/; 

Uwaga: Istnieje wiele sposobów, aby napisać wyrażeń regularnych . Wybrałem wersję, która pasuje do tego, z czym zacząłeś. Zachęcam do przejrzenia tego Regular Expression Tutorial

+1

Czy mogę użyć/[a-zA-Z \ -]/zamiast/^ [a-zA-Z \ -] + $ /? Dlaczego musimy użyć^przed [a-zA-Z \ -]? –

+2

^oznacza Dopasowuje pozycję początkową w ciągu znaków – Neo

+0

'^" oznacza początek ciągu znaków. '$' oznacza koniec. Jeśli opuściłeś '^', na przykład '~ @ * ## @ horatio' przekaże twoją walidację. Podobnie dla '$' i końca sprawdzanego ciągu. –