2010-09-27 156 views
2

有人可以帮我一块正则表达式吗?我想停止用户输入任何字符而不是a-z或连字符 -java字符串正则表达式

希望有人能帮助我。

感谢

+1

你确定你需要一个正则表达式吗?在我看来,你可以简单地检查每个输入的字符。即'如果(ch> ='a')'等 – Sjoerd 2010-09-27 12:35:42

+0

你不认真发布这样的问题来打扰人们吗?在互联网上阅读简单的正则表达式教程可以在10分钟内回答您的问题。 [Google help!](http://www.google.com/search?q=regex+java+tutorial)(是的,我认为你的问题有害) – erikbwork 2010-09-27 12:38:02

+0

'[^ az-]'匹配除az以外的任何字符和连字符。 – Amarghosh 2010-09-27 12:43:40

回答

7

您可以使用正则表达式:^[a-z-]+$

  • ^:启动锚
  • $:尾锚
  • [..]:字符类
  • a-z:任何一个小写字母
  • -:文字连字符。连字符通常是char类中的一个中间字符,但如果其作为字符类的字符处理,则其作为的第一个末尾的
  • +:量词为一个或多个

如果你想允许空字符串,你可以用*

+1

现在这里是OP可能会理解的解释。很好(+1) – 2010-09-27 12:56:36

+0

非常感谢你,我发现正则表达式非常困难,我想不出任何其他方法来手动解决这个问题:/(我认为没有经验是那里的问题;)) – tom 2010-09-27 13:23:07

+0

@tom不要让它得到你失望。正则表达式是可怕的野兽。需要一些程序员几年才能理解它们。如果你尝试,你会发现最终结果。这是一个Java在线正则表达式测试器:http://www.fileformat.info/tool/regex.htm。你可能想玩一下,它可能会帮助你更好地理解事物。 – 2010-09-27 15:05:12

2

更换+如果字符串不匹配^[a-z-]*$,则不允许使用的字符被输入。这种模式是anchored,这样就考虑了整个字符串,并使用repeatedcharacter class(星号指定零个或多个匹配项,因此将接受一个空字符串)以确保只使用允许的字符。

+0

我认为连字符( - )应该被转义。 – 2010-09-27 12:36:21

+0

@Faisal连字符如果是最后一个字符,则不需要在字符类中转义。 – 2010-09-27 12:37:51

+0

downvoters请解释吗? – 2010-09-27 12:39:28

2

如果允许大写使用本:

^[A-Za-z-]+?$

否则:

^[a-z-]+?$

2

如果字符串这个表达式匹配^[a-z\-]*$然后它的罚款。

+2

@Tingu如果它是最后一个字符,则不需要在字符类中跳过连字符。看看[本文](http://www.regular-expressions.info/charclass.html)中名为“元字符内部的元字符”的部分 – 2010-09-27 12:40:55

+0

如果字符串匹配这个正则表达式,那么它很好 - 不是吗? ?顺便说一句,连字符在字符类中的第一个/最后一个字符时不需要转义@Tingu – Amarghosh 2010-09-27 12:41:04

+0

@Amarghosh谢谢你指出。修复了答案。 – 2010-09-27 12:49:52