1 、问题
判断一个字符串中的特殊符号,只有 "."、"-"、"&" 或 ":" 是合法的特殊字符,其他的都是非法特殊字符。同时字符串中的中文、英文、阿拉伯语、西班牙语等都是合法的字符。
2 、GPT 回答
咨询 ChatGPT 得到了下面的答案,但是不对:
3 、如何处理
有没有前端大佬知道怎么写
1
kyuuseiryuu 2 天前
老老实实枚举非法字符吧。
|
2
ymz OP @kyuuseiryuu 走黑名单,非法字符太多了
|
3
codehz 2 天前
/[\p{L}\p{N}\.\-&:]/gmu 看看这样行不行
|
4
fredsunme 2 天前
const pattern = /[^\w\s\.\-\&\u4e00-\u9fa5\u0600-\u06FF\u00C0-\u024F\u00E0-\u00FC]/; 这个呢
|
5
zhhbstudio 2 天前
要么列所有合法字符,要么列所有非法字符。
gpt 在注释里给你写了,他没列出 中文、阿拉伯语和西班牙语的字母,你加上就行 |
6
zed888 2 天前
pattern = re.compile(r'^[\w\s\u4e00-\u9fff\u0600-\u06ff\u00c0-\u017f\.\-\&\:]*$')
|
7
clandyuki 2 天前
/^[\u4e00-\u9fa5\u0600-\u06FFa-zA-Z0-9.\-&:áéíóúñÁÉÍÓÚÑ\s]+$/
试试? |
8
NoManPlay 2 天前 1
const validPattern = /^[\u4E00-\u9FFF\u3400-\u4DBF\u20000-\u2A6DF\u2A700-\u2B73F\u2B740-\u2B81F\u2B820-\u2CEAF\u2CEB0-\u2EBEF\u0041-\u005A\u0061-\u007A\u00C0-\u024F\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\u0870-\u089F\uFB50-\uFDFF\uFE70-\uFEFF\u1EE00-\u1EEFF.\-&:]*$/;
- \u4E00-\u9FFF 基础汉字 - \u3400-\u4DBF 汉字扩展 A 区 - \u20000-\u2A6DF 汉字扩展 B-F 区 - \u0041-\u005A & \u0061-\u007A 英文字母 - \u00C0-\u024F 西班牙语及扩展拉丁字符 - \u0600-\u06FF 阿拉伯语基础块及扩展 - .\-& 合法的特殊字符 // utf 字符范围由 gpt 协助提供 |
9
renmu 2 天前 via Android
等,所以还有什么其他
|
10
seakee 2 天前
```js
function checkSpecialCharacters(str) { // 允许的特殊字符 const allowedSpecials = ['.', '-', '&', ':']; // 使用正则表达式匹配所有非字母数字的字符 // \p{L} 匹配任何语言的字母(包括中文、英文、阿拉伯语等) // \p{N} 匹配任何数字 const specialChars = str.match(/[^\p{L}\p{N}]/gu) || []; // 存储非法的特殊字符 const illegalChars = specialChars.filter(char => !allowedSpecials.includes(char)); return { hasIllegalChars: illegalChars.length > 0, illegalChars: [...new Set(illegalChars)], // 去重 isValid: illegalChars.length === 0 }; } ``` |
11
festoney8 2 天前
三楼用 unicode general category 的方法应该可行,但 Number 大类下有很多奇怪字符,不知道你对这些的定义算不算符号,具体可以对照文档细调分类
https://unicode.org/reports/tr18/#General_Category_Property |
12
longlonglanguage 2 天前
使用白名单不就行了,https://www.shubang.net/unicode/,这个有 unicode 表中文和英文的范围值,你允许使用字符,判断一下范围就行了。
|
13
longlonglanguage 2 天前
@longlonglanguage 试了试 chatgpt ,它给写了 python 代码相当 Nice ,就是英文 unicode 的范围你需要删除一些。```Python
#!/usr/bin/python # Write Python 3 code in this online editor and run it. char="@" # 定义语言的 Unicode 范围 unicode_ranges = { "中文 (CJK Unified Ideographs)": (0x4E00, 0x9FFF), "中文 (CJK Extension A)": (0x3400, 0x4DBF), "英文 (Basic Latin)": (0x0000, 0x007F), "阿拉伯语 (Arabic)": (0x0600, 0x06FF), "西班牙语 (Latin-1 Supplement)": (0x0080, 0x00FF), } def check_language(char): """检查字符属于哪个语言范围""" code_point = ord(char) # 获取字符的 Unicode 编码点 for language, (start, end) in unicode_ranges.items(): if start <= code_point <= end: return 1 return 0 # 测试 result = check_language(char) print(result) ``` |
14
maiminakamiquq 1 天前
之前好像做过类似的 使用的 Unicode
` validateFunction: (rule, value, data, callback) => { const validChars = /^[0-9\u002D\uFF0D\u002C\uFF0C\u3001\u0020\u3000]*$/; if (!validChars.test(value)) { callback('请输入数字、空格,以及中英文状态下的“-”、“,”、“,”和“、”符号。') } else { return true } } ` |