Arrays C语言中的电话号码验证功能
我正在尝试创建一个程序的一部分,我需要在其中验证输入字符串是否为有效的电话号码 有效的电话号码可能包含以下数字和非数字字符:“Arrays C语言中的电话号码验证功能,arrays,c,string,character,Arrays,C,String,Character,我正在尝试创建一个程序的一部分,我需要在其中验证输入字符串是否为有效的电话号码 有效的电话号码可能包含以下数字和非数字字符:“+”、“-”、“(”、“)”。电话号码中至少应有一位数字(顺序和长度无关紧要)。因此,所有其他字符和字母都是无效的。我知道如何检查字符串中是否有单个字符/符号,但现在有26 x 2(小写和大写)+其他无效符号,我认为检查字符串中是否有这些单独的无效字符是不符合逻辑的 是否有一个C函数(可能不是一个函数,而是几个组合函数)可以适应这种情况?还是有别的办法 它将如何运行的示例
+
”、“-
”、“(
”、“)
”。电话号码中至少应有一位数字(顺序和长度无关紧要)。因此,所有其他字符和字母都是无效的。我知道如何检查字符串中是否有单个字符/符号,但现在有26 x 2(小写和大写)+其他无效符号,我认为检查字符串中是否有这些单独的无效字符是不符合逻辑的
是否有一个C函数(可能不是一个函数,而是几个组合函数)可以适应这种情况?还是有别的办法
它将如何运行的示例:
char aString[50];
scanf("%s", aString);
//checks if aString is valid or not
试试这个:
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int checkphone(char *s)
{
char *i, *valid_chars = "01234567890+-()";
int has_at_least_one_digit = 0;
for(; *s && (i = strchr(valid_chars, *s)); s++)
has_at_least_one_digit |= (i < valid_chars + 10);
return (*s == '\0') && has_at_least_one_digit;
}
int main(int argc, char **argv)
{
int i;
for(i = 1; i < argc; i++)
printf("Parameter '%s' %s a phone number.\n",
argv[i],
checkphone(argv[i]) ? "is" : "isn't");
exit(0);
}
检查仅由某些字符组成的字符串的初始部分的长度,因此可以执行
len=strspn(aString,“0123456789()+-”;如果(len==strlen(aString))/*正常*
用于第一次基本检查。
中的函数(宏)可能有一些用处,但是
中一些更为深奥的函数更可能有帮助。strcspn()
、strspn()
和strpbrk()
中的函数可能会有所帮助。最后,您将希望对字符施加一些顺序:+
在开头(仅限),后跟一个数字<代码>(在之前)
(但是如果(
存在,那么也存在)
);没有嵌套的括号<代码>(后接数字;)
前接数字-
分隔两个数字-等等。使用i
作为char*
(实际上,除了整数类型的某个变体外,几乎将其用作任何东西)是一种常规-没有错,但不寻常。使用p
或s
更为传统。
gcc -Wall -o t t.c && ./t +34-478-232-434 892754 343-34 potato +3+3+3 +++ +-+- -43
Parameter '+34-478-232-434' is a phone number.
Parameter '892754' is a phone number.
Parameter '343-34' is a phone number.
Parameter 'potato' isn't a phone number.
Parameter '+3+3+3' is a phone number.
Parameter '+++' isn't a phone number.
Parameter '+-+-' isn't a phone number.
Parameter '-43' is a phone number.