2011-07-12 197 views
0

我在Javascript以下的正則表達式:的Javascript正則表達式爲Java正則表達式

/^(\{?(08)([3-9]){1}-([0-9]){7,7}\}?)$/

它匹配的數字,如:

087-1234893,083-2839283,086-4283944等

如下我就轉換爲Java(Android版):

public boolean isValidMobilePhone(String phone){ 
     boolean returnObj=false; 
     Pattern p = Pattern.compile("^({?(08)([3-9]){1}-([0-9]){7,7}}?)$"); 
     Matcher m = p.matcher(phone); 
     boolean matchFound = m.matches(); 
     if (matchFound){ 
      returnObj=true; 
     } 
     return returnObj; 
    } 

以下是錯誤我得到:

07-12 23:26:10.478: ERROR/AndroidRuntime(11464): java.util.regex.PatternSyntaxException: Syntax error U_REGEX_RULE_SYNTAX near index 3: 07-12 23:26:10.478: ERROR/AndroidRuntime(11464): ^({?(08)([3-9]){1}-([0-9]){7,7}}?)$ 07-12 23:26:10.478: ERROR/AndroidRuntime(11464): ^07-12 23:26:10.478: ERROR/AndroidRuntime(11464): at com.ibm.icu4jni.regex.NativeRegEx.open(Native Method)

我想不出有什麼不對的第三個「?」字符!我試着用'\'轉義它,但那不會編譯。

任何人都可以幫我嗎?

回答

1

用途:

Pattern.compile(「^ 08 [3-9 ] - ([0-9]){7} $「);

甚至

Pattern.compile( 「08 [3-9] - ([0-9]){7}」);

+0

這似乎有效!非常感謝。 – Eamorr

+0

沒問題。下一次使用正則表達式時,您可能想要獲得正則表達式備忘單,也可以嘗試使用baregrep。 – Martin

1

轉義{,最有可能的是}也接近尾聲。

Pattern p = Pattern.compile("^(\\{?(08)([3-9]){1}-([0-9]){7,7}\\}?)$"); 

{字符是用於重複(例如a{3,5}重複a 3-5倍)的特殊字符,並且需要在Java中的正則表達式進行轉義。

+1

你需要兩個'''''來逃避它。公平地說,如果沒有以這種「{n,n}」格式使用,一些正則表達式引擎會從字面上理解這個'{}'。 –

+0

公平對待誰? :-) –

+0

非常感謝您的答覆。我仍然無法使用兩個\\字符... – Eamorr

0

只需要刪除分隔符

爲JavaScript:

var pattern = /^(\{?(08)([3-9]){1}-([0-9]){7,7}\}?)$/; 

爲Java:

string pattern = "^(\{?(08)([3-9]){1}-([0-9]){7,7}\}?)$"; 
+0

嗨,當我使用該模式時,我得到這個錯誤:'無效的轉義序列(有效的\ b \ t \ n \ f \ r \「\'\\)' – Eamorr

相關問題