我正在尝试从文本字符串中提取电话号码,如下所示:
Some address at some street (123) 456-7890
这是我正在使用的当前正则表达式,但它不会从字符串中提取电话号码:
/^(\d[\s-]?)?[\(\[\s-]{0,2}?\d{3}[\)\]\s-]{0,2}?\d{3}[\s-]?\d{4}$/i
我绝不是一名正则表达式专家,所以任何帮助都将受到赞赏。我希望正则表达式能够识别任何美国电话号码格式,如果可能的话,例如:
(123) 456-7890
(123)-456-7890
123 456 7890
123-456-7890
etc...
答案 0 :(得分:1)
您的正则表达式是"锚定",即包含在元字符^
和$
之间,分别代表字符串的开头和结尾。
它会正确验证电话号码,但在字符串中间搜索它是不合适的(因为号码通常从字符串的开头开始,也不会在结束时结束)
删除这两个字符,你应该很好(否则告诉我们你的PHP代码)。
请注意,正则表达式匹配的内容超出了您列出的格式,但由于我没有美国公民,我认为它是预期的。
Here这是一个regex101示例,显示一旦删除了锚点,它就会按预期工作。
答案 1 :(得分:0)
使用以下正则表达式:/\(?\d{3}\)?[\s-]?\d{3}[\s-]\d{4}/
示例:
$re = '/\(?\d{3}\)?[\s-]?\d{3}[\s-]\d{4}/';
$str = 'Some address at some street (123) 456-7890 lorem itsum
Some address at some street (123) 456-7890 lorem itsum
Some address at some street (123)-456-7890 lorem itsum
Some address at some street 123 456 7890 lorem itsum
Some address at some street 123-456-7890 lorem itsum';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
答案 2 :(得分:-1)
这里我使用了JavaScript,您可以在PHP代码中使用以下模式。
<input type="test" id="phone" onblur="isValid(this.value)"/>
var phone = document.querySelector('#phone');
phone.onblur = function(){
var pattern = /^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$/;
if(!pattern.test(this.value)){
alert('In valid phone no');
this.value = '';
}
}