2012-07-21 109 views
2

我在Android中使用此代码来验证密码。但是现在想在BB中使用这个表达式。但它不工作,并给予例外将Android正则表达式移植到BlackBerry正则表达式不起作用

这是Android的代码

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public static boolean isUserPassValid(String userPass) { 

     boolean isValid = false; 
     try { 
      String expression = "^.*(?=.{5,30})(?=.*\\d)(?=.*[a-zA-z]).*"; 
      CharSequence inputStr = userPass; 

      Pattern pattern = Pattern.compile(expression, 
        Pattern.CASE_INSENSITIVE); 
      Matcher matcher = pattern.matcher(inputStr); 
      if (matcher.matches()) { 
       isValid = true; 
      } 
     } catch (Exception e) { 
      Log.e(TAG, "isUserPassValid Message = " + e.toString()); 
      e.printStackTrace(); 
     } 
     return isValid; 
    } 

这是我试图用Java来验证现在

import com.sun.org.apache.regexp.internal.RE; 


public class Test { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     isValidPassword("Arsla"); 

    } 

    public static boolean isValidPassword(String text) { 
     System.out.println(" password for varefication is : " + text); 
     boolean isValid = false; 
     String expression = "^.*(?=.{5,30})(?=.*\\d)(?=.*[a-zA-z]).*$"; 
     String username = text; 
     RE regx = new RE(expression); 
     try { 
      isValid = regx.match(username); 
      System.out.println("password msps to the re " + isValid); 

     } catch (Exception e) { 

     } 
     return isValid; 
    } 

} 

这里是BB代码例外

Exception in thread "main" com.sun.org.apache.regexp.internal.RESyntaxException: Syntax error: Missing operand to closure 
    at com.sun.org.apache.regexp.internal.RECompiler.syntaxError(Unknown Source) 
    at com.sun.org.apache.regexp.internal.RECompiler.terminal(Unknown Source) 
    at com.sun.org.apache.regexp.internal.RECompiler.closure(Unknown Source) 
    at com.sun.org.apache.regexp.internal.RECompiler.branch(Unknown Source) 
    at com.sun.org.apache.regexp.internal.RECompiler.expr(Unknown Source) 
    at com.sun.org.apache.regexp.internal.RECompiler.terminal(Unknown Source) 
    at com.sun.org.apache.regexp.internal.RECompiler.closure(Unknown Source) 
    at com.sun.org.apache.regexp.internal.RECompiler.branch(Unknown Source) 
    at com.sun.org.apache.regexp.internal.RECompiler.expr(Unknown Source) 
    at com.sun.org.apache.regexp.internal.RECompiler.compile(Unknown Source) 
    at com.sun.org.apache.regexp.internal.RE.<init>(Unknown Source) 
    at com.sun.org.apache.regexp.internal.RE.<init>(Unknown Source) 
    at Test.isValidPassword(Test.java:19) 
    at Test.main(Test.java:10) 
+2

这两个测试中的正则表达式模式是不同的。在BB测试中,正则表达式最后有一个'$'。我已经通过'RECompiler'的代码进行了扫描,并且似乎有一些字符'*'导致了这个问题。 – Genzer 2012-07-21 16:12:21

+0

感谢您的回复。你能帮忙找出正确的正则表达式吗? – Arslan 2012-07-21 16:14:07

回答

4

也许BB正则表达式的实现不支持环顾四周。

试着在Android和黑莓手机上执行一个简单的看看例子,看看它是否可以工作 。例如

String expression = "A(?=B)"; // only matches B if it follows an A 
+0

在BB中它给出了相同的例外。我正在尝试关注“^ [a-zA-Z0-9 - ] {8,30} $”;它有助于获得最小8长度的数字和后者。但不包括以确保它必须包含至少1位或1位后者。每个正则表达式实现不支持 – Arslan 2012-07-21 16:33:42

+0

四处查看。正如你现在已经证实的那样,这是异常的来源。由于你从来没有使用捕获和积极的预见,这个正则表达式应该匹配相同:'“^。*(。{5,30})(。* \\ d)(。* [a-zA- z])。* $“' – 2012-07-21 19:38:44

+0

谢谢你的工作 – Arslan 2012-07-23 01:25:19