【问题标题】:Regex to retrieve any alphanumeric otp code正则表达式检索任何字母数字 otp 代码
【发布时间】:2019-12-08 13:34:44
【问题描述】:
我正在尝试获取一个正则表达式来检索字母数字 OTP 代码(代码的长度可能是动态的,即取决于用户的选择)并且必须包含至少一位数字。
我尝试了以下正则表达式:
“[a-zA-z][0-9].[a-zA-z]”
但如果代码中存在特殊字符,则结果应为 null,而不是检索不需要的特殊字符之前和之后的字符。
一些包含 OTP 的示例消息,希望正则表达式在这些消息上成功运行:
- OTP 是 **** 为 78.90 卢比的 txn。
- **** 是您的一次性密码。
- 您好,您的 OTP 是 ****。
至少一位数字的字母数字 OTP 示例:
- 78784
- aZ837
- 987Ny
- 19hd35
- fc82pl
【问题讨论】:
标签:
java
regex
alphanumeric
one-time-password
【解决方案1】:
这会有点困难,也许这个表达式可以与i 标志一起使用:
[a-z0-9]*\d[a-z0-9]*
或带有单词边界:
(?<=\b)[a-z0-9]*\d[a-z0-9]*(?=\b)
测试
import java.util.regex.Matcher;
import java.util.regex.Pattern;
final String regex = "[a-z0-9]*\\d[a-z0-9]*";
final String string = "78784\n"
+ "aZ837\n"
+ "987Ny\n"
+ "19hd35\n"
+ "fc82pl";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
表达式在regex101.com 的右上方面板中进行了解释,如果您想探索/简化/修改它,在this link 中,您可以查看它如何与一些示例输入进行匹配,如果您愿意的话。
【解决方案2】:
试试这个
[0-9a-zA-Z]*[0-9]+[0-9a-zA-Z]*
这会评估您想要的结果。
我已经在 this site 测试过这个
【解决方案3】:
您的正则表达式几乎是正确的。
应该是\b[a-zA-z]*[0-9]+[a-zA-z0-9]*\b。