Java USSD 代码正则表达式模式

Java USSD code regex pattern

如何测试字符串是否为有效的 ussd 代码?我试图编写自己的正则表达式但失败了。

它应该以 * 符号开头,后跟任何整数或另一个 *。星号不能重复。它 不能 **。最后一个符号必须是#。此符号也允许一次。

我的测试:

public static final Pattern USSD = Pattern.compile("Pattern here");

System.out.println(USSD.matcher("*123#").matches());     // Must be true
System.out.println(USSD.matcher("*1*2*3#").matches());   // Must be true
System.out.println(USSD.matcher("*1#23#").matches());    // Must be false
System.out.println(USSD.matcher("***123###").matches()); // Must be false
System.out.println(USSD.matcher("*12**3#").matches());   // Must be false

我已经尝试过的:

您可以将以下正则表达式与 matches() 一起使用:

(?:\*\d+)+#

参见regex demo

在Java中声明为

String pattern = "(?:\*\d+)+#";

图案详情

  • ^ - (隐含在 matches() 中)- 字符串的开始
  • (?:\*\d+)+ - 模式序列出现 1 次或多次:
    • \* - 一个 * 字符
    • \d+ - 1+ 位数
  • $ -(隐含在 matches() 中)- 字符串结尾。

Java demo:

List<String> strs = Arrays.asList("*123#","*1*2*3#","*1#23#","***123###","*12**3#");
Pattern pat = Pattern.compile("(?:\*\d+)+#");
for (String str : strs) {
    System.out.println(str + ": " + pat.matcher(str).matches());
}

输出:

*123#: true
*1*2*3#: true
*1#23#: false
***123###: false
*12**3#: false