Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 确定字符串在JS中是否有电话号码_Javascript_Regex_Validation_Phone Number - Fatal编程技术网

Javascript 确定字符串在JS中是否有电话号码

Javascript 确定字符串在JS中是否有电话号码,javascript,regex,validation,phone-number,Javascript,Regex,Validation,Phone Number,我目前正在构建一个聊天室,希望对用户发送的内容进行一些快速的客户端验证。我希望能够检测用户是否在他们的信息中发送了电话号码(尽可能多的格式,但通用的美国格式可以),并用磅符号(#)替换它。我已经为这样的电子邮件实现了这一点: var message = 'Hi. This is my email: foo@bar.com. This is my number: (970)-555-7595.'; var emailExp = /([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.

我目前正在构建一个聊天室,希望对用户发送的内容进行一些快速的客户端验证。我希望能够检测用户是否在他们的信息中发送了电话号码(尽可能多的格式,但通用的美国格式可以),并用磅符号(#)替换它。我已经为这样的电子邮件实现了这一点:

var message = 'Hi. This is my email: foo@bar.com. This is my number: (970)-555-7595.';
var emailExp = /([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/img;

// prints: Hi. This is my email: *********. This is my number: (970)-555-7595
console.log(message.replace(emailExp, '*********'));
我希望它看起来像这样:

var message = 'Hi. This is my email: foo@bar.com. This is my number: (970)-555-7595.';
var emailExp = /([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/img;
var phoneExp = SOME_CRAZY_PHONE_REGEX;

// prints: Hi. This is my email: *********. This is my number: ##########
console.log(message.replace(emailExp, '*********').replace(phoneExp, ##########));
我有什么办法可以做到这一点吗?我需要它找到字符串中每个电话号码的所有实例,并用磅符号替换它们。表达式不必太疯狂,但我希望它能匹配大多数通用的美国格式

我确实查找了一些模式,但大多数模式都验证了完整的字符串是一个电话号码。我正在尝试查找并替换字符串中的所有电话号码。谢谢

编辑

我不想改善我的电子邮件模式。这只是一个适用于此环境的电话号码模式:)


这个正则表达式应该适用于我们的电话号码,有没有区号,有没有wit-在他们应该去的地方

解决方案最终是:

var phoneExp = /(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?/img;

根据fatcat的决议。我只需要删除开头的“^”字符和结尾的“$”字符。

因此,如果是电话号码,则匹配的同一个reg exp与您需要的几乎相同……找到验证电话号码的代码之一,只需删除其中的regex部分,而不必使用整个函数。将它插入到第二个代码段中,就像使用
emailExp
一样,您应该准备好了。话虽如此,使用正则表达式表示电话号码从来都不是一个好主意。您最好使用这样的库:如果您有非拉丁TLD之类的东西,或者如果您发送
电子邮件,电子邮件正则表达式将失败+string@gmail.com
。至于电话号码,这将是一个疯狂的正则表达式。你想用这个做什么?因为如果你试图防止任何人输入电子邮件和/或电话号码,用户会立即绕过这些措施,例如在domain.com上拼写出东西
emal
,甚至只需添加一个绕过正则表达式的随机空格。你在找什么?电话号码是regex吗?无论使用什么正则表达式,全局标志都将替换字符串中出现的所有正则表达式。@imthenanchoman No.555 number.var phoneExp=/(\+\d{1,2}\s)?(?\d{3})?[\s.-]\d{3}[\s.-]\d{4}/img;tbhvar phoneExp=/((\d{3}))?(\d{3})?[\s-]?\d{3}[\s-]?\d{4}/img应该工作得更好;还是不太好。需要它能够将“970555595 97055557595”更改为“###################”
var phoneExp = /(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?/img;