2011-05-09 63 views
1

的javascript://解釋爲正則表達式註釋一些問題,編譯器

^(\+?|(\(\+?[0-9]{1,3}\))|)([ 0-9.//-]|\([ 0-9.//-]+\))+((x|X|((e|E)(x|X)(t|T)))([ 0-9.//-]|\([ 0-9.//-]+\)))?$ 

我dugged它從我的C#/ VB庫我有這個正則表達式驗證電話號碼,現在我要翻譯它變成了javascript。但它有語法錯誤(我懷疑這是由於//字符)。我的嘗試:

$IsPhone = function (input) { 
    var regex = new window.RegExp("^$|^(\+?|(\(\+?[0-9]{1,3}\))|)([ 0-9.//-]|\([ 0-9.//-]+\))+((x|X|((e|E)(x|X)(t|T)))([ 0-9.//-]|\([ 0-9.//-]+\)))?$", ""); 
    return regex.test(input.trim()); 

}; 
alert($IsPhone("asd")); 
+0

能否請你給什麼你的表情是試圖匹配一些背景?這將使它更容易調試。 – 2011-05-09 11:29:00

+0

您是否嘗試過逃跑的斜線? – jhlllnd 2011-05-09 11:29:25

+1

這是什麼?一遊戲「點差」?無論如何,如果它是一個語法錯誤,我會嘗試,爲什麼你需要無論如何斜線翻倍使用的JSLint。 – SJuan76 2011-05-09 11:29:55

回答

1

Errors translating regex from .NET to javascript

JavaScript中的反斜槓字符 字符串是一個轉義字符,所以你必須在你的字符串 都逃脫了 反斜槓下一個字符爲 的字符串,而不是常規的 表達式。所以就在 附近開始,在你的「^(+ ?, 反斜槓那裏只是逃避了+爲 這個字符串(它不需要), 以及正則表達式看到的只是一個原始的 +重複。因此,錯誤。

4

您的問題與評論無關。您只是混淆了創建RegExp對象的兩種不同方式。

當您在JavaScript代碼RegExp對象,你要麼把它寫成一個字符串,你傳遞給一個RegExp構造函數,或作爲一個正則表達式文字。因爲像\n\",在字符串中的任何實際的反斜槓字符串文字的支持反斜槓轉義序列進行轉義,太。所以,當你需要逃脫正則表達式元字符像(+,你必須使用反斜槓,像這樣:

var r0 = "^$|^(\\+?|(\\(\\+?[0-9]{1,3}\\))|)([ 0-9./-]|\\([ 0-9./-]+\\))+((x|X|((e|E)(x|X)(t|T)))([ 0-9./-]|\\([ 0-9./-]+\\)))?$"; 
var regex0 = new RegExp(r0, ""); 

正斜槓沒有特殊的意義,無論是正則表達式或字符串。你曾經有逃跑前向斜線的唯一原因是因爲他們作爲分隔符正則表達式文字。你用反斜槓轉義正向斜線就像你用正則表達式元字符像\(\+,或反斜槓本身做:\\。這裏是你的正則表達式的正則表達式字面版本:

var regex1 = /^$|^(\+?|(\(\+?[0-9]{1,3}\))|)([ 0-9.\/-]|\([ 0-9.\/-]+\))+((x|X|((e|E)(x|X)(t|T)))([ 0-9.\/-]|\([ 0-9.\/-]+\)))?$/;