我需要在Python中对所有美国和国际电话号码进行非常基本的电话号码验证和格式化.这是我到目前为止所拥有的:
import re
def validate(number):
number = re.compile(r'[^0-9]').sub('', number)
if len(number) == 10:
# ten-digit number, great
return number
elif len(number) == 7:
# 7-digit number, should include area code
raise ValidationError("INCLUDE YOUR AREA CODE OR ELSE.")
else:
# I have no clue what to do here
def format(number):
if len(number) == 10:
# basically return XXX-XXX-XXXX
return re.compile(r'^(\d{3})(\d{3})(\d{4})$').sub('$1-$2-$3', number)
else:
# basically return +XXX-XXX-XXX-XXXX
return re.compile(r'^(\d+)(\d{3})(\d{3})(\d{4})$').sub('+$1-$2-$3-$4', number)
Run Code Online (Sandbox Code Playgroud)
我的主要问题是我不知道国际电话号码是如何工作的.我假设它们只是10位数字,\d+前面有国家代码.这是真的?
我想用html字符串替换给定的电话号码,例如
<a>click here now! (123) -456-789</a>
Run Code Online (Sandbox Code Playgroud)
我认为接近它的最佳方法是找到看起来像电话号码的所有不同情况,例如:
$pattern = *any 3 numbers* *any characters up to 3 characters long*
$pattern .= *any 3 numbers* *any characters up to 3 characters long*
$pattern .= *any numbers up to 4 numbers long*
// $pattern maybe something like [0-9]{3}\.?([0-9]{3})\.?([0-9]{4})
$array = preg_match_all($pattern, $string);
foreach($array)
{
// replace the string with the the new phone number
}
Run Code Online (Sandbox Code Playgroud)
基本上,正则表达式将如何?
我需要从rails中的大字符串中提取一些电话号码.这些号码将以多种格式出现,并且可以在一个字符串中包含多个电话号码.
以下是发生的格式类型的示例:
提取出现在文本正文中的电话号码的最有效方法是什么?
更新:谢谢你的答案.在对其中一些进行测试后,我意识到我应该包含更多示例.以下列表中未显示以下内容:
我是Ruby on Rails的新手,正在寻找验证电话号码为xxx-xxx-xxxx的任何建议.感谢任何建议.我的phone_number列类型是一个字符串.谢谢!
如何从文本文件中提取电话号码?
x <- c(" Mr. Bean bought 2 tickets 2-613-213-4567 or 5555555555 call either one",
"43 Butter Rd, Brossard QC K0A 3P0 – 613 213 4567",
"Please contact Mr. Bean (613)2134567",
"1.575.555.5555 is his #1 number",
"7164347566"
)
Run Code Online (Sandbox Code Playgroud)
这是一个已被其他语言回答的问题(参见php abd general regex)但似乎没有在SO上为R解决.
我搜索并找到了可能的正则表达式来查找电话号码(除了上面其他语言的正则表达式):http://regexlib.com/Search.aspx?k = phone 但是无法在gsub内部使用R用这些来提取示例中的所有这些数字.
理想情况下,我们会得到类似的东西:
[[1]]
[1] "2-613-213-4567" "5555555555"
[[2]]
[1] "613 213 4567"
[[3]]
[1] "(613)2134567"
[[4]]
[1] "1.575.555.5555"
[[5]]
[1] "7164347566"
Run Code Online (Sandbox Code Playgroud) 我购买了一份联系表格.很棒的小东西,但我需要转换电话号码的验证,以允许英国数字格式 - 换句话说,允许空格.
现在它验证没有空格,最小长度为8个字符:
if(is_numeric($phone))
{
if(!$phone || strlen($phone) < 8)
{
$error .= "Please enter your phone number without spaces.<br />";
}
}
else
{
$error .= "Please enter numeric characters in the phone number field.<br />";
}
Run Code Online (Sandbox Code Playgroud) 我有一个奇怪的问题,我正在使用下面的代码来测试一个电话号码,在我的测试中我的代码运行正常.该节目昨天上线,有人使用电话号码08720 123 456,我的代码失败了.你能告诉我为什么0161 287 1234会返回TRUE,08720 123 456会返回FALSE吗?
传真号码1:0161 287 1234 ---> IsNumber返回TRUE传真号码2:08720 123 456 ---> IsNumber返回FALSE
static bool IsNumber(string value)
{
// Return true if this is a number.
int number1;
return int.TryParse(value, out number1);
}
bool testForFax = IsNumber(faxOrEmail);
if (testForFax == true)
{
backgroundWorker2.RunWorkerAsync(); //send fax
}
else
{
MessageBox.Show("Please enter a fax number.");
}
Run Code Online (Sandbox Code Playgroud) 我希望电话号码的工作组合为'0'后跟10位数的手机号码(或)0091,后跟10位手机号码(或)+91后跟10位数字.
1)0跟随和+91以下的数字正在使用以下正则表达式我也希望0091跟随数字工作,我的正则表达式是:
"^([0]|(?:[0][0]|\\+)(91))([7-9]{1})([0-9]{9})$";
Run Code Online (Sandbox Code Playgroud)
你能建议我做一个正则表达式吗?
我正在通过输入询问电话号码Scanner class而我只是强制执行号码,但我可能会犯这个错误.我需要有一串int,而不是一个int的东西,并且比int的大小容量大.最终,它需要7个整数或10个整数,而不是介于两者之间或更多或更少,但当然所有数字而不是字母.
System.out.println("What is the phone number (digits only)?: ");
while (!Main.scan.hasNextInt())
{
Main.scan.next();
System.out.println("What is the phone number (digits only)?: ");
}
int phone_number = Main.scan.nextInt();
Run Code Online (Sandbox Code Playgroud)
清除整数字符串 - 不是意味着整数数组而是一系列独立的整数但当然如果你指定为一个整数,它就无法区分,所以你必须使用长整数.这就是我所引用的,事实上我的电话号码是一系列的int而不是一个int这么原始的类型对我来说是正确的,一半是错的.
解决方案:感谢Braj !!
String numbers = Main.scan.next();
long phone_number = 0 ;
while (!numbers.matches("(\\d{7}|\\d{10})$"))
{
System.out.println("What is the patient's phone number (digits only)?: ");
numbers = Main.scan.next();
}
phone_number = Long.valueOf(numbers);
Run Code Online (Sandbox Code Playgroud) 我有一些(有点)工作代码可以按以下格式匹配位于美国的电话号码: ###-###-####
问题是,我的代码只是击中else在我的代码块为每个phone_number在我的phone_numbers:
file = open("results.txt", "w")
rgxpattern = '^[0-9]{3}-[0-9]{3}-[0-9]{4}$'
regexp = re.compile(rgxpattern)
for phone_number in phone_numbers:
phone_number = str(phone_number)
if regexp.match(phone_number):
file.write('\n')
file.write(str(phone_number))
else:
file.write('BAD#')
Run Code Online (Sandbox Code Playgroud)
我上面的rgxpattern有问题吗?我试过使用:
^[0-9]{3}-[0-9]{3}-[0-9]{4}$
Run Code Online (Sandbox Code Playgroud)
和
^\d{3}-\d{3}-\d{4}$
Run Code Online (Sandbox Code Playgroud)
示例电话号码:
111-222-3333
777-444-4444
Run Code Online (Sandbox Code Playgroud)
结果摘录:
BAD#BAD#BAD#BAD#
Run Code Online (Sandbox Code Playgroud)
有什么想法或帮助吗?