Android プログラムのさまざまな規則性

Android の開発プロセスでは、さまざまな正規表現が使用されることが避けられません。使用されるさまざまな正規表現を整理しましょう。必要な場合は入手できます。必要でない場合はコメントを歓迎します。

1. 携帯電話番号を決定する


    /**
     * 手机号判断 true为通过验证
     * */
    public static boolean isChinaPhoneLegal(String str) throws PatternSyntaxException {
        if (str == null) {
            return false;
        }
        if (str.length() != 11) {
            return false;
        }
        String regExp = "^((13[0-9])|(15[^4])|(18[0,2,3,5-9])|(17[0-8])|(147))\\d{8}$";
        Pattern p = Pattern.compile(regExp);
        Matcher m = p.matcher(str);
        return m.matches();
    }

2. ID番号の判定

    /**
     * 18位身份证号码的基本数字和位数验校
     *
     * @param idcard
     * @return
     */
    public static boolean isIdCard(String idcard) {
        return idcard == null || "".equals(idcard) ? false : Pattern.matches(
                "(^\\d{15}$)|(\\d{17}(?:\\d|x|X)$)", idcard);
    }

3. 身分証明書による男女の判断

    /**
     * 根据身份证判断男女
     * */
    public static boolean isSex(String id){
        int ids=Integer.parseInt(id.substring(16,17));
        if (ids%2==0){
            return false;
        }else {
            return true;
        }
    }

4. IDカードを確認し、生年月日を取得します

    /**
     * 身份证号码验证
     */
    public static boolean isIdNO( String num) {
        // 去掉所有空格
        num = num.replace(" ", "");
        Pattern idNumPattern = Pattern.compile("(\\d{17}[0-9xX])");
        //通过Pattern获得Matcher
        Matcher idNumMatcher = idNumPattern.matcher(num);
        //判断用户输入是否为身份证号
        if (idNumMatcher.matches()) {
            System.out.println("您的出生年月日是:");
            //如果是,定义正则表达式提取出身份证中的出生日期
            Pattern birthDatePattern = Pattern.compile("\\d{6}(\\d{4})(\\d{2})(\\d{2}).*");//身份证上的前6位以及出生年月日
            //通过Pattern获得Matcher
            Matcher birthDateMather = birthDatePattern.matcher(num);
            //通过Matcher获得用户的出生年月日
            if (birthDateMather.find()) {
                String year = birthDateMather.group(1);
                String month = birthDateMather.group(2);
                String date = birthDateMather.group(3);
                System.out.println("你的出生年月日为:"+year+"年"+month+"月"+date+"日");
                if (Integer.parseInt(year) < 1900 // 如果年份是1900年之前
                        || Integer.parseInt(month) > 12 // 月份>12月
                        || Integer.parseInt(date) > 31 // 日期是>31号
                ) {
                    System.out.println("身份证号码不正确, 请检查");
                    return false;
                }
            }
            return true;
        } else {
            System.out.println( "请输入正确的身份证号码");
            return false;
        }
    }

5. IPアドレスを確認する

    /**
     * 校验IP地址
     *
     * @param ipAddress
     * @return
     */
    public static boolean isIPAddress(String ipAddress) {
        return Pattern.matches("(2[5][0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})", ipAddress);
    }

6. URLの確認

    /**
     * 校验URL
     *
     * @param url
     * @return 校验通过返回true,否则返回false
     */
    public static boolean isUrl(String url) {
        return Pattern.matches("http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?", url);
    }

7.メールを確認する

    /**
     * 校验邮箱
     *
     * @param email
     * @return 校验通过返回true,否则返回false
     */
    public static boolean isEmail(String email) {
        return Pattern.matches("^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$", email);
    }

8. ユーザー名の確認

    /**
     * 校验用户名
     *
     * @param username
     * @return 校验通过返回true,否则返回false
     */
    public static boolean isUserName(String username) {
        return Pattern.matches("^[a-zA-Z]\\w{5,17}$", username);
    }

9. パスワードを確認する

    /**
     * 校验密码(不包含特殊字符)
     *
     * @param password
     * @return 校验通过返回true,否则返回false
     */
    public static boolean isPassword(String password) {
        return Pattern.matches("^[a-zA-Z0-9]{1,12}$", password);
    }

10. 中国語の文字を確認する

    /**
     * 校验汉字
     *
     * @param chinese
     * @return 校验通过返回true,否则返回false
     */
    public static boolean isChinese(String chinese) {
        return Pattern.matches("^[\u4e00-\u9fa5]{1,9}$", chinese);
    }

11.QQ番号の確認

    /**
     * 校验QQ号
     * */
    public static boolean isQQ(String qq){
        return Pattern.matches("^[1-9]\\d{4,10}$ ",qq);
    }

12. 郵便番号を確認する

    /**
     * 校验邮政编码
     * */
    public static boolean isNum(String num){
        return Pattern.matches("^[1-9]\\d{5}$", num);
    }

上記は一般的に使用される規則的なルールですが、ニーズを満たせない場合は、自分で記述することができます。

正規表現の構文

メタキャラクター

説明する

\

次の文字トークン、後方参照、または 8 進エスケープを入れます。たとえば、「\\n」は \n と一致します。「\n」は改行文字と一致します。シーケンス「\\」は「\」に一致し、「\(」は「(」に一致します。これは、多くのプログラミング言語における「エスケープ文字」の概念に相当します。

^

入力文字列の先頭と一致します。RegExp オブジェクトの Multiline プロパティが設定されている場合、^ は "\n" または "\r" の後の位置にも一致します。

$

入力文字列の末尾と一致します。RegExp オブジェクトの Multiline プロパティが設定されている場合、$ は「\n」または「\r」の前の位置にも一致します。

*

前の部分式と何度でも一致します。たとえば、zo* は「z」、「zo」、および「zoo」に一致します。* は {0,} と同等です。

+

前の部分式と 1 回以上 (1 回以上) 一致します。たとえば、「zo+」は「zo」と「zoo」には一致しますが、「z」には一致しません。+ は {1,} と同等です。

?

直前の部分式と 0 回または 1 回一致します。たとえば、「do(es)?」は「do」または「does」の「do」と一致します。? は {0,1} に相当します。

{n}

n は負ではない整数です。一致が n 回決定されました。たとえば、「o{2}」は「Bob」の「o」とは一致しませんが、「food」の両方の「o」には一致します。

{n,}

n は負ではない整数です。少なくとも n 回一致します。たとえば、「o{2,}」は「Bob」の「o」とは一致しませんが、「foooood」のすべての「o」と一致します。「o{1,}」は「o+」と同等です。「o{0,}」は「o*」と同等です。

{n,m}

m と n は両方とも非負の整数であり、n<=m です。少なくとも n 回、最大で m 回一致します。たとえば、「o{1,3}」は「fooooood」の最初の 3 つの o と一致します。「o{0,1}」は「o?」と同等です。カンマと 2 つの数値の間にスペースを入れることはできないことに注意してください。

?

この文字が他の修飾子 (*、+、?、{n}、{n,}、{n,m}) の直後にある場合、一致パターンは非貪欲です。非貪欲モードは検索文字列と可能な限り一致しませんが、デフォルトの貪欲モードは検索文字列と可能な限り一致します。たとえば、文字列「oooo」の場合、「o+?」は単一の「o」と一致し、「o+」はすべての「o」と一致します。

。ポイント

「\r\n」を除く任意の 1 文字と一致します。「\r\n」を含む任意の文字と一致するには、「[\s\S]」のようなパターンを使用します。

(パターン)

パターンに一致し、この一致を取得します。取得された一致は、VBScript では SubMatches コレクションを使用し、JScript では $0...$9 プロパティを使用して、生成された Matches コレクションから取得できます。括弧文字と一致させるには、「\(」または「\)」を使用します。

(?:パターン)

パターンに一致しますが、一致結果は得られません。つまり、不一致であり、後で使用するために保存されません。これは、または文字「(|)」を使用してパターンの一部を結合する場合に便利です。たとえば、「industr(?:y|ies)」は「industry|industries」よりも短い式です。

(?=パターン)

正の先読みは、文字列一致パターンの先頭にある検索文字列と一致します。これは非取得一致です。つまり、後で使用するために一致を取得する必要はありません。たとえば、「Windows(?=95|98|NT|2000)」は、「Windows2000」の「Windows」とは一致しますが、「Windows3.1」の「Windows」とは一致しません。先読みは文字を消費しません。つまり、一致が発生した後、先読みを含む文字の後ではなく、最後の一致の直後に次の一致の検索が開始されます。

(?!パターン)

正負先読みは、パターンに一致しない文字列の先頭にある検索文字列と一致します。これは非取得一致です。つまり、後で使用するために一致を取得する必要はありません。たとえば、「Windows(?!95|98|NT|2000)」は、「Windows3.1」の「Windows」と一致しますが、「Windows2000」の「Windows」と一致することはできません。

(?<=パターン)

リバース ポジティブ プリチェックはポジティブ ポジティブ プリチェックと似ていますが、方向が逆です。たとえば、「(?<=95|98|NT|2000)Windows」は、「2000Windows」の「Windows」と一致しますが、「3.1Windows」の「Windows」とは一致しません。

(?<!パターン)

逆否定検索は前方否定検索と似ていますが、方向が逆です。たとえば、「(?<!95|98|NT|2000)Windows」は、「3.1Windows」の「Windows」と一致しますが、「2000Windows」の「Windows」とは一致しません。

x|y

x または y と一致します。たとえば、「z|food」は「z」、「food」、または「zood」と一致します (ここでは注意してください)。「(z|f)ood」は「zood」または「food」と一致します。

[xyz]

キャラクターのコレクション。含まれている文字のいずれかと一致します。たとえば、「[abc]」は「plain」の「a」と一致します。

[^xyz]

負の文字セット。含まれていない任意の文字と一致します。たとえば、「[^abc]」は「plain」の「plin」と一致します。

[az]

文字の範囲。指定された範囲内の任意の文字と一致します。たとえば、「[az]」は、「a」から「z」までの範囲内の任意の小文字の英字と一致します。

注: ハイフンが文字グループ内にあり、2 つの文字の間にある場合にのみ、文字の範囲を表すことができます。ハイフンが文字グループの先頭にある場合は、ハイフン自体を表すことしかできません。

[^az]

負の文字範囲。指定された範囲にない任意の文字と一致します。たとえば、「[^az]」は「a」から「z」の範囲にない任意の文字に一致します。

\b

単語の境界、つまり単語とスペースの間の位置と一致します (つまり、正規表現における「一致」には 2 つの概念があり、1 つは文字の一致、もう 1 つは位置の一致です。\b は一致する位置)。たとえば、「er\b」は「never」の「er」と一致しますが、「動詞」の「er」とは一致しません。

\B

単語以外の境界と一致します。「er\B」は「動詞」の「er」と一致しますが、「never」の「er」とは一致しません。

\cx

x で示される制御文字と一致します。たとえば、\cM は Control-M または復帰に一致します。x の値は、AZ または AZ のいずれかでなければなりません。それ以外の場合は、c をリテラルの「c」文字として扱います。

\d

数字と一致します。[0-9]に相当します。

\D

数字以外の文字と一致します。[^0-9] に相当します。

\f

フォーム フィード文字と一致します。\x0c および \cL に相当します。

\g

正規表現で使用されるグローバル(global)の状態を示します。グローバル フラグを使用すると、検索操作で最初の文字列だけでなく、検索対象の文字列内のすべての文字列が検索されることを示します。

\n

改行文字と一致します。\x0a および \cJ に相当します。

\Q \E このメソッドは、文字列を自動的にエスケープするのに役立ちます

\r

キャリッジリターンと一致します。\x0d および \cM に相当します。

\s

スペース、タブ、フォーム フィードなどの非表示文字と一致します。[ \f\n\r\t\v] と同等。

\S

表示されている任意の文字と一致します。[^ \f\n\r\t\v] と同等。

\t

タブ文字と一致します。\x09 および \cI に相当します。

\v

垂直タブ文字と一致します。\x0b および \cK に相当します。

\w

アンダースコアを含む任意の単語文字と一致します。"[A-Za-z0-9_]" に似ていますが、同等ではありません。"word" 文字は Unicode 文字セットを使用します。

\W

単語以外の文字と一致します。「[^A-Za-z0-9_]」と同等。

\xn

n と一致します。n は 16 進数のエスケープ値です。16 進エスケープ値は、特定の 2 桁の長さである必要があります。たとえば、「\x41」は「A」と一致します。「\x041」は「\x04&1」と同等です。ASCII エンコーディングは正規表現で使用できます。

\番号

num と一致します。ここで、num は正の整数です。フェッチされたヒットへの参照。たとえば、「(.)\1」は、連続する 2 つの同一の文字と一致します。

\n

标识一个八进制转义值或一个向后引用。如果\n之前至少n个获取的子表达式,则n为向后引用。否则,如果n为八进制数字(0-7),则n为一个八进制转义值。

\nm

标识一个八进制转义值或一个向后引用。如果\nm之前至少有nm个获得子表达式,则nm为向后引用。如果\nm之前至少有n个获取,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若n和m均为八进制数字(0-7),则\nm将匹配八进制转义值nm。

\nml

如果n为八进制数字(0-7),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。

\un

匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。例如,\u00A9匹配版权符号(&copy;)。

\< \> 匹配词(word)的开始(\<)和结束(\>)。例如正则表达式\<the\>能够匹配字符串"for the wise"中的"the",但是不能匹配字符串"otherwise"中的"the"。注意:这个元字符不是所有的软件都支持的。
\( \) 将 \( 和 \) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用。
| 将两个匹配条件进行逻辑“或”(Or)运算。例如正则表达式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。注意:这个元字符不是所有的软件都支持的。
+ 匹配1或多个正好在它之前的那个字符。例如正则表达式9+匹配9、99、999等。注意:这个元字符不是所有的软件都支持的。
? 匹配0或1个正好在它之前的那个字符。注意:这个元字符不是所有的软件都支持的。
{i} {i,j} 匹配指定数目的字符,这些字符是在它之前的表达式定义的。例如正则表达式A[0-9]{3} 能够匹配字符"A"后面跟着正好3个数字字符的串,例如A123、A348等,但是不匹配A1234。而正则表达式[0-9]{4,6} 匹配连续的任意4个、5个或者6个数字

 

 

 

 

 

 

おすすめ

転載: blog.csdn.net/lanrenxiaowen/article/details/111973724