2012-12-06 55 views
7

我有一個函數,我首先檢查作爲參數傳遞的字符串是否只有字母。但它總是返回爲假。下面是我jsfiddle代碼未通過第一次驗證

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'); 

上面的代碼總是提醒Only letters please

回答

9

你需要擺脫報價作出regex正則表達式文本:

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

這裏是一個updated fiddle

當前,regex引用字符串文字。當你傳遞的東西,這不是一個正則表達式對象或文字來String#match,它含蓄地轉換這樣的說法對正則表達式對象(見ES5 15.5.4.10):

  • 如果Type(正則表達式)是對象和值的[[類]] 的regexp的內部屬性是"RegExp",然後讓RX的regexp;
  • 否則,讓RX是彷彿創造了一個新的RegExp對象的表達new RegExp(正則表達式)其中RegExp是內置構造與該名稱的標準。

你的正則表達式因此這樣解釋(因爲字符串包含正斜槓你期待來界定正則表達式文本):

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

那無法比擬的東西,因爲它正在尋找正斜槓,然後是字符串的開始。

+1

即將發佈相同的:)你可以使正則表達式更短:'/^[az] + $/g' –

+0

請幫助我爲什麼當我給這樣的字符串時,我的jsfiddle返回false'This is一個字符串?我怎樣才能改變它,以便它也接受這樣的字符串?謝謝 – 2619

+0

@ x4f4r - 這不起作用,因爲字符串中有空格,而您的正則表達式只能匹配字母。只需爲正則表達式添加一個空格,它就可以使用該字符串。 –

相關問題