首页 > 解决方案 > 使用正则表达式验证字符串是否以指定字符开头或结尾

问题描述

我需要验证一个输入字符串,以便它只允许在字符串的开头或结尾包含字符“E”、“W”、“N”、“S”(或它们的小写字母)(不是两个都)。字符后跟数字。字符不能在数字之间。此外,如果它出现在开头,那么它就不能在结尾(反之亦然)。

我能够想出这个正则表达式:[wWeEnNsS]{0,1}\\d+它只检查开头的字符。但是我如何确保如果它出现在开头,那么它不能在结尾?

以下是有效输入的示例:

w234,
W234,
E234,
234w,
234

无效输入:

w234w,
2w34,
ww234,
we234,
w234e,
w

标签: javaregexvalidation

解决方案


您可以使用不区分大小写的模式匹配来使用替代:

^[ewns][0-9]+$|^\d+[ewns]?$

在 Java 中

String regex = "^(?:[ewns]?[0-9]+|\\d+[ewns])$";
  • ^[ewns][0-9]+$字符串的开头,匹配列出的字符中的 1 个和字符串的结尾
  • |或者
  • ^\d+[ewns]?$字符串的开头,可选匹配列出的字符中的 1 个和字符串的结尾

正则表达式演示| Java 演示


推荐阅读