如何编写一个正则表达式,包括所有键盘字符,但不包括“~”和“,”?
如何编写一个正则表达式,包括所有键盘字符,但不包括“~”和“,”?
你试过这个吗?
[^~,]
[a-zA-Z0-9\t\n ./<>?;:"'`!@#$%^&*()\[\]{}_+=|\\-]
这基本上就涵盖了它(即使看起来像是一种疯狂的完成任务的方式)。也许问题定义可以帮助您在第一个列表[^〜,]
中添加更多要排除的内容,而不是尝试创建所有键盘字符的大型列表。
您没有说明使用的语言/工具,但在Java中,我会使用以下正则表达式:
"[\\p{Print}&&[^~,]]"
这是两个集合的交集:所有可打印的ASCII字符和除了波浪号和逗号以外的所有字符。
为了使正则表达式起作用,我必须这样做:
"[^~,][^~,]*"
因为[^〜,]
否定了〜
和,
[^〜,]*
表示零或多个〜
和,
(在我们的情况下无用)
通过放置[^〜,][^〜,]*
,您可以否定一个或多个〜
或,
[^~,]+
。 - Teejay相关内容。
我浪费了很多时间搜索,所以下面是我得出的答案。
我想要所有键盘按键(包括空格和制表符):
// all keys (including space and tab)
var allKeyboardKeysRegex = /^[a-zA-Z0-9~`!@#\$%\^&\*\(\)_\-\+={\[\}\]\|\\:;"'<,>\.\?\/ ]*$/;
// example tests
var nonShiftChars = "`1234567890-= qwertyuiop[]\asdfghjkl;'zxcvbnm,./ "
var shiftChars = "~!@#$%^&*()_+{}|:\"<>? ";
var someAlphaNumeric = "aAbB12 89yYzZ";
// test with allKeyboardKeysRegex
allKeyboardKeysRegex.test(nonShiftChars);
allKeyboardKeysRegex.test(shiftChars);
allKeyboardKeysRegex.test(someAlphaNumeric);
输出:
true
true
true
// removing '~' and ','
var allKeyboardKeysRegexMinusSome = /^[a-zA-Z0-9`!@#\$%\^&\*\(\)_\-\+={\[\}\]\|\\:;"'<>\.\?\/ ]*$/;
"1234567890"
"abcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"~`!@#$%^&*()_-+={[}]|\:;"'<,>.?/ " (last 2 are space & tab here)
"~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/ \t\r\n " (last 2 are space & tab here, all these chars are escaped with \)
[A-Za-z0-9-]+[ 0-9A-Za-z#$%=@!{},`~&*()'<>?.:;_|^/+\t\r\n\[\]"-]*
所有支持的键盘字符的正则表达式对我有效:
/^[a-zA-Z0-9.!@?#"$%&:';()*\+,\/;\-=[\\\]\^_{|}<>~` ]+$/
要排除'~'和','字符:
/^[a-zA-Z0-9.!@?#"$%&:';()*\+\/;\-=[\\\]\^_{|}<>` ]+$/
;
。虽然重复出现可以提高可读性。 - Donn Lee