String checkId="^(?![0-9])[a-zA-Z|0-9|$|_]+";什么意思
时间: 2023-06-24 21:08:28 浏览: 76
这是一个正则表达式,用于检查一个字符串是否符合身份证号码的规范。
该表达式包括以下规则:
- 字符串以非数字字符开头
- 字符串只包含字母、数字、$和_字符
- 字符串长度不限
使用这个表达式可以判断一个字符串是否符合身份证号码的规范,但是请注意,这个表达式本身并不能验证一个字符串是否真的是一个有效的身份证号码。
相关问题
画出下列程序对应的流程图以及思维导图#include <stdio.h> struct ID { int num[17];// 存储身份证号码前 17 位 }; int checkID(char *ID) { int i, sum = 0, mod; // sum 存储前 17 位乘以系数后的结果之和,mod 存储 sum 对 11 取余的结果 struct ID id; // 定义一个 ID 类型的结构体 int *p = id.num; // 定义一个指向 id.num 数组的指针 // 将身份证号码前 17 位转换成数字并存储到 id.num 数组中 for (i = 0; i < 17; i++) { *(p + i) = *(ID + i) - '0'; } // 计算前 17 位乘以系数后的结果之和 for (i = 0; i < 17; i++) { sum += *(p + i) * (i % 2 == 0 ? 7 : (i % 2 == 1 ? 9 : 0)); } // 计算 sum 对 11 取余的结果 mod = sum % 11; // 判断校验位是否正确并返回相应的值 if (mod == 0 && *(ID + 17) == '1') { return 1;} else if (mod == 1 && *(ID + 17) == '0') { return 1; } else if (mod == 2 && *(ID + 17) == 'X') { return 1; } else if (mod >= 3 && mod <= 10 && *(ID + 17) == mod + '0') { return 1; } else { return 0; }} int main() { char ID[18] = "11010119900307663X"; // 测试用的身份证号码 if (checkID(ID)) { printf("校验位正确!\n"); } else { printf("校验位错误!\n"); } return 0; }
以下是程序对应的流程图和思维导图:
流程图:
```
+------------------+ +-----------------------+
| main函数 | | checkID函数 |
+------------------+ +-----------------------+
| |
| |
v v
+------------------+ +-----------------------+
| 定义 | | 定义结构体ID |
| 数组 | | 定义变量sum |
| ID | | 定义指针变量p |
+------------------+ +-----------------------+
| |
v |
+------------------+ +-----------------------+
| 将身份证号 | | 将身份证号前17位 |
| 前17位转换为 | | 转换成数字并存储到 |
| 数字并存储 | | id.num数组中 |
| 到数组中 | +-----------------------+
+------------------+ |
| |
v |
+------------------+ |
| 计算前17位 | |
| 乘以系数后的结果| |
| 之和并对11取余| |
+------------------+ |
| |
v |
+------------------+ |
| 判断校验位是否正确| |
+------------------+ |
| |
v |
+------------------+ |
| 输出结果 | |
+------------------+ |
```
思维导图:
```
main函数
|
|----定义数组ID
|
|----调用checkID函数
| |
| |----定义结构体ID
| |
| |----定义变量sum
| |
| |----定义指针变量p
| |
| |----将身份证号前17位转换成数字并存储到id.num数组中
| |
| |----计算前17位乘以系数后的结果之和
| |
| |----计算sum对11取余的结果
| |
| |----判断校验位是否正确并返回相应的值
| |
| |----输出结果
|
|----返回0
```
解释代码:def CheckId(s): lista = [] if s[0] == '_' or s[0].isalpha(): for i in s[1:]: if i == '_' or i.isalpha() == True or i in '0123456789': lista.append(1) if len(lista) == len(s)-1: return 0 else: return 1 else: return 2 s = input() a = CheckId(s) if a == 2: print('Error. First char must be alphas or _.') if a == 1: print('Error. Other chars must be alphas number or _.') if a == 0: print('Valid identifier.')
这段代码定义了一个名为 CheckId 的函数,用于检查一个字符串是否为有效的标识符。标识符是在程序中用来表示变量、函数、类等命名的标识符,它必须符合一定的命名规则。
函数的参数是一个字符串 s,它表示需要检查的标识符。函数首先定义了一个空列表 lista,用于存储每个字符是否符合标识符的规则。
接下来,函数通过判断 s 的第一个字符是否为下划线或字母来确定标识符的首字符是否符合规则。如果不符合规则,则返回 2,表示首字符不合法。
如果首字符合法,则遍历字符串 s 的剩余部分,判断每个字符是否为下划线、字母或数字,如果都符合规则,则将 1 添加到列表 lista 中。最后,如果列表 lista 的长度等于字符串 s 的长度减 1,则表示整个标识符都符合规则,返回 0,表示该字符串是有效的标识符;否则,返回 1,表示标识符中有不合法的字符。
在主程序中,首先通过 input() 函数获取用户输入的字符串 s,然后调用 CheckId 函数检查该字符串是否为有效的标识符,并将返回值赋给变量 a。最后,根据返回值 a 的不同,输出不同的提示信息,告诉用户该标识符是否合法。