簡體   English   中英

Android中帶有正則表達式的意外結果

[英]Unexpected result with regular expressions in Android

我想使用助手類來驗證文本輸入。 我從一種方法來證明一個名稱,該名稱以大寫字母開頭,最大長度為20個字符:

package xyz.helper;
import java.util.regex.Pattern;
public abstract class InputValidator {  
    public static boolean checkSingleName(String string) {  
        return Pattern.matches("^[A-ZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜ]{1}[a-zàáâãäåæçèéêëìíîïñòóôõöøùúûü]{1,19}", string); 
    }
}

例如,當我在活動中使用“ Hello”進行測試時,我會返回FALSE和錯誤消息。 我的正則表達式錯了嗎?

// Check User entries
private boolean checkEntries() {
    boolean validEntry = InputValidator.checkSingleName(title.toString());
        if (!validEntry) {
            title.setError(getString(R.string.error_occasion));
            return false;    
        }
        return true;    
}

謝謝你的提示

我認為您構建句子的方式目前不正確。 我會這樣嘗試:

return Pattern.compile("^[A-ZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜ]{1}[a-zàáâãäåæçèéêëìíîïñòóôõöøùúûü]{1,19}").matcher("Hello").matches()

通常,在諸如此類的問題中,您沒有顯示的就是問題所在。

演示正則表達式的有效Java實現(請參閱http://ideone.com/nFPcic ):

import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.regex.Pattern;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
      if(checkSingleName("Hello")) {
        System.out.println("Yes that is valid");
      }
      else {
        System.out.println("No that is not valid");
      }// your code goes here
    }
    public static boolean checkSingleName(String string) {  
        return Pattern.matches("^[A-ZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜ]{1}[a-zàáâãäåæçèéêëìíîïñòóôõöøùúûü]{1,19}", string); 
    }
}

使用"Hello"作為輸入字符串打印出“是有效”。 當我在名稱中添加數字時,它會顯示“不是無效”。 如預期的那樣。

如果您得到不同的結果,那是因為您沒有顯示某些內容。 您要測試的字符串的開頭/結尾是否有回車符,空格或制表符?

順便說一句,您實際上不需要大寫字母后的{1} 而您的正則表達式具有嚴格的限制。 參見http://en.wikipedia.org/wiki/Category:Lowercase_proper_names_or_pseudonyms ,甚至更好, http ://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/-令人發指有時很有趣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM