使用正则表达式添加带边界的空格

时间:2013-10-05 16:30:02

标签: java regex space

我试图让用户在10个字符的边界内为其名称添加空格。如果他们不想,他们可以选择保留名称不含空格:myNameLengthmyNoNums完全匹配。

我不确定如何在正则表达式中表示space 我已经使用this website来帮助我理解正则表达式以及JPS,但我无法找到正确的语法。

到目前为止,我已经尝试了下面的内容以及\\t{0,10}","[ ]{0,10}[\\s]*。另外我知道它不是\t\s,因为Java使用正则表达式的方式不同。

这就是我想知道的原因:
Java是否有不同的方式来编写带边界的空间?

 @Test
        public void testName() 
        {
            String myNameLength = "\\w{1,10}";
            String myNoNums = "[^\\d]{1,10}";
            String mySpaces = "\\s{0,10}";

            Player p = new Player();
            p.Player("Antonio");
            String s = p.getName();
            assertTrue(s.matches(myNameLength) && s.matches(myNoNums) && s.matches(mySpaces));  
        }

3 个答案:

答案 0 :(得分:1)

使用正则表达式验证名称不是一个好主意,但如果您想允许任何字符,包含空格,您可以使用正则表达式:

.{1,10}

但是如果你想只有\w,没有数字但有空格,你可以使用单一的正则表达式:

[\\w &&[^\\d]]{1,10}

使用当前的代码设置,您确保该名称可以匹配0到10个空格而不包含其他字符。

答案 1 :(得分:0)

我对你的要求有点模糊,但是通过阅读你的问题,看起来你唯一要做的就是排除数字并限制长度,所以你不必担心明确检查用于空间;

之类的东西
public boolean isValid(String name) {
   if (name==null) { 
       return false; 
   }
   int len = name.length();
   Pattern digit = Pattern.compile("\\d");
   return len>0 && len<=10 && !digit.matcher(name).find();
}
如果你真的想使用正则表达式,

应该可以工作。当然,如果你选择这条路线,我还建议将正则表达式存储为Pattern只为你的类编译一次 - 将digit声明移到类的顶部:{{1 }} 在顶部。

编辑:已实现我没有回答您的明确问题。我不确定你的意思是“有边界的空间”。如果你想使用正则表达式来检查一个字符串是否以空格结束,它是private Pattern digit = Pattern.compile("\\d");($字符代表输入的结尾);检查字符串是否以空格开始,它是Pattern.compile("\\s+$").matcher(string).find()。再一次,我在实践中将它们分成不同的部分;这是为了简洁起见。

您提到的Pattern.compile("^\\s+").matcher(string).find()表达式用于明确检查制表符,这似乎不是您想要的; \\t检查任何空格字符。你也可以通过大写它们来否定这些特殊的正则表达式字符; \\s将告诉您字符串是否完全由非空白字符组成。

此外,您的测试断言将在包含空格的名称上失败,因为您正在调用string.matches("\\S+"),它会检查整个字符串是否包含1到10个字符; “单词字符”定义为[a-zA-Z0-9_]。测试字符串中的任何空格和s.matches(myNameLength)都将返回matches()

答案 2 :(得分:0)

你的意思是你想要允许最多十个字母,以及不计入长度的可选空格吗?你可能正在寻找这个:

"^(?:[a-z] *){1,9}[a-z]$"  // spaces allowed within the name, but not at the ends

......或者这个:

"^(?: *[a-z]){1,10} *$"    // spaces allowed everywhere

在编译正则表达式时,请确保并指定CASE_INSENSITIVE模式。

至于匹配正则表达式中的空格字符,没有技巧;你就像我一样使用文字空间。但它确实看起来有点尴尬,它不会在COMMENTS模式下工作。您还可以使用十六进制转义符("\\x20")或Unicode转义符("\\u0020")。