修改给定的正则表达式以检查字符串是不是不包含电话号码

Posted

技术标签:

【中文标题】修改给定的正则表达式以检查字符串是不是不包含电话号码【英文标题】:Modify given regex to check if string contains no phone number修改给定的正则表达式以检查字符串是否不包含电话号码 【发布时间】:2021-08-11 06:08:08 【问题描述】:

我有一个 jQuery Validate 方法来检查是否输入了电话号码

现在我需要修改它以检查字符串是否不包含电话号码

$.validator.addMethod('contains_no_phone_number', function (value, element) 
    return this.optional(element) || /^[\+]?[(]?[0-9]3[)]?[-\s\.]?[0-9]3[-\s\.]?[0-9]4,6$/im.test(value);
, "Do not include phone number");

我不希望有人以下面的格式输入包含电话号码的字符串:

02221234567

0222-1234567

+862221234567

+86-222-123-4567

+86(222)1234567

我希望 jquery 验证器方法应该返回

PHONE_NUMBER (错误)

PHONE_NUMBER 一些字(假)

一些话 PHONE_NUMBER (假)

一些单词 PHONE_NUMBER 一些单词(False)

一些词(真)

电话号码长度在 7 及以上

注意:如果需要,请随意制作自己的正则表达式。

【问题讨论】:

你使用^[0-9\-\(\)\s]+.的模式也可以匹配2个空格,我认为这不应该是一个有效的电话号码。这个问题对我来说似乎有点令人困惑,因为方法名称应该是 contains_no_phone_number 您可以查看 this page 以了解如何匹配电话号码,然后在匹配时返回 .test() 的反面。 @第四只鸟感谢您的时间,问题已更新,您是对的,它不应该匹配空格。 鉴于您基本上已经问了 3 次相同的问题,唯一的区别是正则表达式模式,您在哪里解决这个问题?换句话说,你不能简单地将第一个问题的逻辑与每个新的正则表达式模式结合起来吗?你试过吗? @Sparky 我不擅长正则表达式,我需要帮助解决每个问题中不同的正则表达式模式。 问题是没有证明任何真正的解决方案尝试。您只是根据您的标准请求代码。 Wiktor 甚至花时间解释了正则表达式在所有三种解决方案中的工作原理,以便您了解更多信息。 【参考方案1】:

按照from our chat的逻辑,模式如下:

/^(?!.*(?:\s|^)(?:\+\d|0)(?:[()-]*\d)6,(?!\S))/

请参阅regex demo。

详情

^ - 字符串开头 (?! - 负前瞻的开始: .* - 除换行符之外的任何零个或多个字符,尽可能多 (?:\s|^) - 空格或字符串开头 (?:\+\d|0) - + 和一个数字或零 (?:[()-]*\d)6, - 六次或多次出现零或多个 ()- 字符,然后是数字 (?!\S) - 当前位置右侧不允许有非空白字符 ) - 前瞻检查结束。

【讨论】:

非常感谢你帮了我很多,我问错了,请做两次修改 1) 制作正则表达式,以便如果电话号码存在于字符串中,它应该返回 false。 2) 使其通用而不是 +86 或 86 可以输入任何国家代码,可以是 1、2、3 或 4 位数字,后跟可选的 + 符号。 非常感谢您,您是天才,如果可能,请为我的问题投票。你真的真的很棒。 @DMP 好的,所以您想强制执行空白边界,对吧?然后使用this regex 或this regex(适用于任何浏览器)。 @DMP 第二个没有lookbehinds,因此适用于Safari和其他尚不支持lookbehinds的浏览器。

以上是关于修改给定的正则表达式以检查字符串是不是不包含电话号码的主要内容,如果未能解决你的问题,请参考以下文章

修改给定的 jquery 验证器方法以检查字符串是不是不包含 URL

如何获得正则表达式来检查字符串是不是仅包含字母字符 [a-z] 或 [A-Z]?

在 Ruby 中,我可以在不使用正则表达式的情况下检查字符串是不是包含字母吗?

如何使用正则表达式检查用户输入是不是仅包含特殊字符?

如何制作正则表达式以查看字符串是不是包含某个字母

检查字符串是不是以正则表达式数字开头