【问题标题】:Regular expression to allow alphabets and onle one occurrence of select special characters正则表达式允许字母和只出现一次选择特殊字符
【发布时间】:2014-03-21 04:01:26
【问题描述】:

我需要名称字段的正则表达式。名称只能是字母。 name 字段的其他要求是它可以包含 但不必包含以下任何一个字符:撇号 (') 或井号 (#) 或连字符 (-) 到目前为止我有这个

 [\\w]*[\'#-]?

这会检查特殊字符,但只检查字符串的末尾。 例如

JohnO'Connell -> returns false -> should return true

JohnOConnell' -> returns true -> expected behavior
JohnOConnell# -> returns true -> expected behavior
JohnOConnell- -> returns true -> expected behavior
JohnOConnell-# -> returns false -> expected behavior

这必须如何更新?

谢谢

【问题讨论】:

  • 只允许使用单撇号、磅或连字符?是否可以有 2 个撇号?
  • 不,不可能有任何 2 个特殊字符。甚至不重复特殊字符。

标签: java regex


【解决方案1】:

你快到了:

^[a-zA-Z]+['#-]?[a-zA-Z]*$

只是在中间制作'#- 是可选的。

【讨论】:

  • 感谢您的回复。我试过这个,如果特殊字符被添加到字符串的末尾,那么它会中断或返回 false。特殊字符可以在字符串中的任何位置。
  • @user1860447 您的最后一条评论与您的​​问题描述中的示例相矛盾!不确定您到底在寻找什么。尝试从上面的正则表达式将+ 更改为*。但风险自负!
  • 对不起。那是我的错误。复制和粘贴罪魁祸首。我将编辑问题。
  • 我最终是这样实现的:^[a-zA-Z]*['#-]?[a-zA-Z]*\$
【解决方案2】:

这个允许任何 unicode 字母:

^\pL+['#-]?\pL+$

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    相关资源
    最近更新 更多