2012-12-06 10 views
7

Ho una funzione in cui sto verificando per la prima volta che una stringa passata come argomento ha solo lettere o meno. Ma torna sempre come falso. Qui di seguito è il mio jsfiddleIl codice non supera la prima convalida

function takeString (str) { 
    var regex = "/^[A-Za-z]+$/"; 

    if (str.match(regex)) { 
     if (str.charCodeAt(0) === str.toUpperCase().charCodeAt(0)) { 
      alert('true'); 
      return true; 
     } 
     else { 
      alert('false'); 
      return false; 
     } 
    } 
    else { 
     alert('Only letters please.'); 
    } 
} 

takeString('string'); 

Il codice di cui sopra avvisa sempre Only letters please.

risposta

9

È necessario sbarazzarsi delle citazioni per fare regex un'espressione regolare letterale:

var regex = /^[A-Za-z]+$/; 

Ecco un updated fiddle.

Attualmente, regex si riferisce a una stringa letterale. Quando si passa qualcosa che non è un oggetto espressione regolare o letterale String#match, converte implicitamente che l'argomento a un oggetto espressione regolare (vedi ES5 15.5.4.10):

  • Se Tipo (regexp) è oggetto e il valore della proprietà interna [[Classe]] di espressione regolare è "RegExp", quindi lasciare rx essere regexp;
  • Else, diamo rx essere un nuovo oggetto RegExp creato come per l'espressione new RegExp(regexp) dove RegExp è lo standard built-in costruttore con quel nome.

l'espressione regolare è quindi interpretato come questo (dal momento che la stringa contiene i caratteri di barra diretta ti aspettavi per delimitare un'espressione regolare letterale):

var regex = /\/^[A-Za-z]+$\//; 

che non può corrispondere nulla, dal momento che sta cercando una barra diretta, seguita dall'avvio della stringa.

+1

Stava per pubblicare lo stesso :) Puoi rendere l'espressione regolare ancora più breve: '/^[az] + $/g' –

+0

Potresti per favore aiutarmi perché il mio jsfiddle restituisce falso quando do una stringa come questa' Questo è una stringa'? Come posso cambiarlo in modo che accetti anche tali stringhe? Grazie – 2619

+0

@ x4f4r - Questo non funziona perché ci sono spazi nella stringa e la tua espressione regolare corrisponde solo alle lettere. Basta aggiungere uno spazio alla regex e funzionerà con quella stringa. –

Problemi correlati