关于c语言判断电话号码合法问题

2025-03-06 11:21:48
推荐回答(5个)
回答1:

提取号码并验证合法性,最好使用正则表达式,你这种判断方式只能判断填入的是否为数字、判断号码长度什么的 ,但是号码本身的数字规则等等都不能进行验证。比如你输入的号码,本身就是不正确的,不会有人用123-123456这种形式。
不过正则表达式有一些复杂,很难马上上手。
可以看看这里:http://www.2cto.com/kf/201110/107088.html

回答2:

/* 检查电话合法性的代码 */
bool check_phone_num_correctness(const char* buffer)
{
const char* p = buffer;
for(; *p && (isdigit(*p) || *p == '-'); ++p);
return (*p == NULL) ? true : false;
}

bool get_phone_number(char* buffer, int max_size)
{
/* 使用一个更大的缓冲区保存输入, 如果字符串太长了, 不可以拷贝到你设定的 buffer[15]中 */
char big_buffer[1000];
printf("Please enter the engineer's telephone:");
scanf("%s", big_buffer);
int phone_size = strlen(big_buffer);

/* 判断是否合法, 1) 长度不超过buffer的长度 2) 字符内容符合电话号码要求(自己可以再扩展) */
bool is_size_correct = (phone_size > 0) && (phone_size < max_size);
if(!is_size_correct || !check_phone_num_correctness(big_buffer)) {
fprintf(stderr, "Error! please re-enter.\n");
return false;
}

/* copy back */
strcpy(buffer, big_buffer);
return true;
}

/* calling method */
char phone[15];
bool phone_correct = get_phone_number(phone, 15);

回答3:

bool bRightPhone = false;
while(!bRightPhone)
{
printf("Please enter the engineer's telephone:");
scanf("%s",&Engineer->EngineerPhone);
bool bEveryRight = true;
if(sizeof(&Engineer->EngineerPhone) > 0 && sizeof(&Engineer->EngineerPhone) > 15)
{
for(x=0;xEngineerPhone);x++)
{
if(((&Engineer->EngineerPhone < '0') && (&Engineer->EngineerPhone > '9')) && ((&Engineer->EngineerPhone) !='-'))
{
bEveryRight = false;
break;
}
}
}
else
{
bEveryRight = false;
}
bRightPhone = bEveryRight ;
if(!bRightPone)
{
printf("Wrong PhoneNumber,Again!\n");
}
}

回答4:

电话格式有几种?如果就只有上面的格式,你只需要检查前三个和后6个是否为数字,第4个是否为'-'

回答5:

不好意思,弄说错了