为了账号安全,请及时绑定邮箱和手机立即绑定

可以包含字母数字字符但不能包含除 | 之外的任何内容的正则表达式

可以包含字母数字字符但不能包含除 | 之外的任何内容的正则表达式

慕无忌1623718 2021-09-15 14:11:40
验证邮政编码时,我试图检查邮政编码是否可以包含字母数字且仅包含字符-,|和  (空格)。我正在检查"34343-1232".matches("(?!|| |-|[0-9])"))但这不起作用。有没有最佳方法来做到这一点?
查看完整描述

3 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

允许使用简单的邮政编码(例如 12345)并强制规定,如果找到可接受的分隔符(空格、逗号、管道),它必须以四位数字结尾,这个正则表达式就足够了。

[0-9]{5}(?:[-,| ][0-9]{4})?


查看完整回答
反对 回复 2021-09-15
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

我不知道您所在国家/地区的确切邮政编码规则,但此代码段将帮助您入门:


// define the pattern - should be defined as class field

// instead of + you could use {3,5} to match min. 3, max. 5 characters - see regular expressions manual

private static final Pattern PATTERN_ZIP = Pattern.compile("^[0-9A-Z]+[ \\-\\|]?[0-9A-Z]+$");


String zip = "1A2-3B4C5";

// Optional: let's make some text cleaning

String cleanZip = zip.toUpperCase().trim();


// Do the mat(c)h

Matcher m = PATTERN_ZIP.matcher(cleanZip);


if (m.find()) {

    System.out.println("Zip code correct");

} else {

    System.out.println("Zip code incorrect");

}


查看完整回答
反对 回复 2021-09-15
?
浮云间

TA贡献1829条经验 获得超4个赞

您不需要负前瞻,您可以使用字符类 ( []) 代替|运算符,并且您希望使用^$来表示字符串的开头和结尾。像这样:

"34343-1232".matches("^[0-9| -]+$")


查看完整回答
反对 回复 2021-09-15
  • 3 回答
  • 0 关注
  • 187 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信