【问题标题】:Regex not working, need a good regex for the below rules :正则表达式不起作用,需要一个好的正则表达式来满足以下规则:
【发布时间】:2014-01-23 16:40:16
【问题描述】:

a) 名字字段不接受以下字符。

  • 不接受 * 和 + 值。
  • 不接受除 alpha (a-z,A-Z) 以外的值。
  • 不允许的符号 ~ ! $ % ^ * _ + ` = { }[ ] | \ : “ ; ? ( ) & # , /
  • 允许的符号是:
    • 撇号 (')
    • 连字符 (-)
    • 句号 (.))

b) 名字不能有“和”这样的模式。例如:“约翰和米勒”

c) 名字是必填参数,不能为空或空值。

d) 不允许在下一个双引号之前没有两个字符的双引号,并且验证失败。

  • 例如:“P”

e) 不允许有一个双引号而没有匹配的双引号,并且验证失败。

  • 例如:“ABC

【问题讨论】:

  • 您当前的正则表达式是什么?如果您只列出有效字符而不是禁止和允许的字符,则更容易阅读。 b) 和 e) 不是矛盾的吗?
  • "[[\(\),*+]|[[^(a-zA-Z)]&&[^'-\\.\\s]]]" - 我不是不过擅长正则表达式。
  • 你试过什么?它以什么方式失败?为了发布问题,您至少必须说明对可能解决方案的基本理解。
  • 你的矛盾太多了。例如:“不接受 alpha (a-z,A-Z) 以外的值”,但您继续说:“允许的符号是:撇号 (')、连字符 (-)、句点 (.)”。另外,您到底在验证什么?只是输入名字?全名?请清理您的要求,使其更加清晰和直接。
  • 名/中间名/姓/首选名。那么我们不能排除这些字符并禁止所有其他字符吗?

标签: java regex validation


【解决方案1】:

这是我得到的最接近的,希望对您有所帮助:

^(?!.* 和 )([a-zA-Z'.-]*("[a-zA-Z'.-]{2,}")*\s*)*$

不过,它可能会被修剪掉。

转义应该是这样的:

"^(?!.* and )([a-zA-Z'.-]*(\"[a-zA-Z'.-]{2,}\")*\\s*)*$"

对于 JSF:

"^(?!.* and )([a-zA-Z'.-]("[a-zA-Z'.-]{2,}")\s *)*$"

【讨论】:

  • 小心,方括号中的- 是一个特殊字符。如果你想在那里使用它,你必须将它放在开头或结尾:[-a-zA-Z'.] 或 [a-zA-Z'.-]
  • 你说得对,我错过了那个,现在编辑答案。谢谢!
  • 您好,谢谢!你能用转义字符编辑这个吗,因为我仍然遇到解析问题:(
  • @CodingDuckling:那么更新后的答案是上面那个还是这个?
  • @SandeepAllampalli 这个,你可以在regexpal.com 上试一试。
【解决方案2】:

我会使用这个 RegEx 进行验证:^(?!.*\band\b)(?=.*[a-zA-Z])"[a-zA-Z '.-]{2,}"$。它确保在字符串中找不到单词“and”并且字符串至少包含一个字母。字符串的长度也不能少于 2 个字符,并且只能包含字母字符、空格、撇号、句点和连字符。

【讨论】:

  • 你应该转义句点:“\.”
  • @CodingDuckling,没必要
  • 它显示为解析错误。可能需要转义?中间名也是可选的,我需要允许它为空。所以我需要将它们括在大括号中吗?
  • 如果你在function('^"[a-zA-Z'.-]+"$')这样的代码中使用它,就会发生解析错误,因为你必须转义':function('^"[a-zA-Z\'.-]+"$')。而且还不清楚名字、中间名等是什么。
  • @CodingDuckling,. 字符仅算作方括号外的通配符,里面只是一个点。
猜你喜欢
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 2016-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多