正则表达式匹配Android包名称

Jar*_*ler 4 regex android

如何检查字符串是否为有效的Android软件包名称?

Jar*_*ler 9

AndroidManifest文档中针对package属性描述了有效的Android包名称:

名称应唯一。该名称可以包含大写或小写字母(“ A”至“ Z”),数字和下划线(“ _”)。但是,单个包装名称部分只能以字母开头。

参见:https : //developer.android.com/guide/topics/manifest/manifest-element.html#package


以下正则表达式将匹配有效的Android软件包名称:

^([A-Za-z]{1}[A-Za-z\d_]*\.)+[A-Za-z][A-Za-z\d_]*$
Run Code Online (Sandbox Code Playgroud)

用法示例:

String regex = "^([A-Za-z]{1}[A-Za-z\\d_]*\\.)+[A-Za-z][A-Za-z\\d_]*$";
List<PackageInfo> packages = context.getPackageManager().getInstalledPackages(0);
for (PackageInfo packageInfo : packages) {
  if (packageInfo.packageName.matches(regex)) {
    // valid package name, of course.
  }
}
Run Code Online (Sandbox Code Playgroud)

有关正则表达式的详细说明,请参见:https : //regex101.com/r/EAod0W/1

  • 如果我是对的,则上述正则表达式会非法接受“ test1”之类的字符串。根据Android的官方规则,有效的程序包名称必须至少包含两个段。我建议进行以下改进:^([A-Za-z] {1} [A-Za-z \ d _] * \。)+ [A-Za-z] [A-Za-z \ d _] * $ (2认同)
  • @AniketSuryavanshi Android 包名称中不可接受连字符。 (2认同)