2012-06-06 80 views
1

我想匹配其中只有a,g,c或t的字符串(不敏感) 所以字符串:「AAaaatCCCc」有效,而「catb」不是。 這是我的函數:匹配模式不起作用

var pattern = "/^[agct]+$/i"; 
if (!this.inputSeq.value.trim().match(pattern)){ 
    this.errMsg = "Invalid input sequence -must contain only a,g,c or t" 
    updateErrorBox(this.errMsg); 
} 

當我輸入有效字符串我仍然收到錯誤消息

+0

哪個瀏覽器? 。 – gdoron

+2

'pattern'應該是一個正則表達式,而不是一個字符串。 https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions。此外,如果您只是想測試表達式是否匹配,請使用'.test':'pattern.test(this.inputSeq.value.trim())'。 –

+0

google chrome 16 – Tom

回答

4

從正則表達式字面刪除引號:

var pattern = "/^[agct]+$/i"; 

要:

var pattern = /^[agct]+$/i; 

有一個隱式轉換

的regexp

的正則表達式對象。如果傳遞非RegExp對象obj,則通過使用新的RegExp(obj)將其隱式轉換爲RegExp。

MDN

但它不工作,因爲你必須在模式標誌和斜線:/../

var pattern = "^[agct]+$"; 
... .match(pattern) 

可能會因爲隱式轉換工作,但案件敏感,因爲缺少i標誌。

+0

是的沒錯 – Tom

1

假設你輸入的文字被正確地拾起,它的價值可能有助於找出問題的控制檯日誌,該代碼應工作:

if (!this.inputSeq.value.match(/^\s*[agct]+\s*$/i)) { 
    this.errMsg = "Invalid input sequence -must contain only a,g,c or t" 
    updateErrorBox(this.errMsg); 
} 

您使用的文字刺痛,而不是一個正則表達式該模式因此是錯誤消息。