【问题标题】:Need a regex expression to validate a phone number must contain only the characters +, -, *, ? and 0-9需要正则表达式来验证电话号码必须仅包含字符 +、-、*、?和 0-9
【发布时间】:2019-11-08 06:51:18
【问题描述】:

希望你们都做得很好。我需要一个正则表达式来验证以下条件:

  • 电话号码只能包含字符 +、-、*、?和 0-9。
  • 只有前导字符可以是 +(只有一次应该出现,如果超过 1 个 + 附加到前导字符,则应该失败)。
  • 只有尾随字符可以是 *。 (只有一次应该出现,如果超过 1 * 附加到前导字符,则应该失败)。
  • + 和 * 之间,我可以有 20 个字符(允许为 0-9、-、?)。

我有以下表达式来验证前导 (+) 和尾随字符 (*)。它需要扩展以验证是否有多个相同的字符附加到前导和尾随字符。

^[0-9+].*[0-9*]$

【问题讨论】:

  • "我有下面的表达式 [...] 它需要扩展" 它在哪里?
  • 这个问题似乎根本没有包括任何解决问题的尝试。请编辑问题以显示您尝试过的内容,并使用Minimal, Complete, and Verifiable example 显示您遇到的特定障碍。欲了解更多信息,请参阅How to Ask
  • 可选 +* 之间最多 20 个字符...没有最小值?是否只允许 +*?

标签: javascript regex


【解决方案1】:

试试这个...

^\+?([-?0-9]{0,20})\*?

这将匹配前导字符 (+) 和尾随字符 (*) 的 0 和 1。

它还会检查 0-9、- 和 ?发生 0 到 20 次。

所以这会匹配:

  • +23-4932-4234?3423*
  • 23-4932-4234?3423*
  • +23-4932-4234?3423
  • 23-4932-42343423
  • 等,

否则看看Regular Expression Library

【讨论】:

  • 感谢您的回复。我尝试了上面的表达式。它适用于所有用例,即使是失败案例,例如:+23-4932-4234?ddsfsdf3423*
  • 是的,它将捕获“+23-4932-4234?”,如果您需要 * at 然后删除 ? * (? = 捕获零或一) 之后。或者将 [^\D] 添加到您的捕获组以排除任何其他非数字,如下所示... ^\+?([-?0-9]{0,20}[^\D])\*
  • 谢谢安布罗。我能够使用以下符合我要求的修改后的表达式来实现这一点(考虑尾随字符为 0-9 或 * 或?)。表达式:^\+?([-?0-9]{3,23}[^\D])?[-?0-9]+*?$
  • @Karthik,没问题。很高兴它让你走上了正确的道路。如果您正在为正则表达式苦苦挣扎,我发现Regex101 相当有用。请检查勾选以将其标记为已解决。谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-08-05
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 2014-06-25
相关资源
最近更新 更多