正则表达式匹配符号:! $ % ^和 ;*()_+|~-=`{}[]:& ”;& # 39;& lt; ?,./
Regex to Match Symbols: !$%^&*()_+|~-=`{}[]:";'<>?,./
我试图在JavaScript中创建一个Regex测试,该测试将测试字符串是否包含任何这些字符:
!$%^&*()_+|~-=`{}[]:";'<>?,./
更多信息,如果你感兴趣:)
这是一个很酷的密码更改应用程序,我正在工作。如果您感兴趣,这里是剩余的代码。
我有一个列出密码要求的表,当最终用户键入新密码时,它将测试regex数组,并在相应的表行中放置一个复选标记,如果它…检查出来:)我只需要添加这个来代替validation
数组中的第4项。
var validate = function(password){
valid = true;
var validation = [
RegExp(/[a-z]/).test(password), RegExp(/[A-Z]/).test(password), RegExp(/'d/).test(password),
RegExp(/'W|_/).test(password), !RegExp(/'s/).test(password), !RegExp("12345678").test(password),
!RegExp($('#txtUsername').val()).test(password), !RegExp("cisco").test(password),
!RegExp(/([a-z]|[0-9])'1'1'1/).test(password), (password.length > 7)
]
$.each(validation, function(i){
if(this)
$('.form table tr').eq(i+1).attr('class', 'check');
else{
$('.form table tr').eq(i+1).attr('class', '');
valid = false
}
});
return(valid);
}
是的,也有相应的服务器端验证!
这个正则表达式非常简单。只需使用字符类。连字符是字符类中的一个特殊字符,所以它需要放在前面:
/[-!$%^&*()_+|~=`{}'[']:";'<>?,.'/]/
您还需要转义其他正则表达式元字符。
编辑:连字符是特殊的,因为它可以用来表示一个字符范围。同样的字符类可以简化为这样的范围:
/[$-/:-?{-~!"^_`'[']]/
有三个范围。'$' to '/', ':' to '?,从"{"到"~"。最后一个字符串不能更简单地表示为一个范围:!"^_ '[]。
使用ACSII表查找字符类的范围
答案
/['W'S_]/
<标题>这将创建一个字符类,删除单词字符、空格字符,并添加下划线字符(因为下划线是"word")字符)。剩下的就是特殊字符了。大写字母表示对应的小写字母的否定。
'W
将选择所有非"word"相当于[^a-zA-Z0-9_]
的字符'S
将选择所有非"空格";相当于[ 't'n'r'f'v]
的字符_
将选择"因为我们在使用'W
时否定了它,需要将它添加回
做到这一点的最简单和最短的方法:
/[^'p{L}'d's@#]/u
[^...]
匹配下面列表中不存在的单个字符
'p{L}
=>匹配任何语言的任何类型的字母'd
=>匹配从0到9的数字's
=>匹配任何不可见字符@#
=>@
和#
字符
不要忘记传递u
(unicode)标志
实现这一点的一个简单方法是负集[^'w's]。这实际上捕获了:
- 非字母数字字符(字母和数字)
- 任何非空格、制表符或换行符(统称为空白)的内容
由于某些原因['W'S]不以同样的方式工作,它不做任何过滤。Zael对其中一个答案的评论提供了一些解释。
// The string must contain at least one special character, escaping reserved RegEx characters to avoid conflict
const hasSpecial = password => {
const specialReg = new RegExp(
'^(?=.*[!@#$%^&*"''['']''{''}<>/''('')=''''''-_´+`~'':;,''.€''|])',
);
return specialReg.test(password);
};
以@jeff-hillman的回答为基础,这是完整的版本
/[''@#$-/:-?{-~!"^_`'[']]/
测试function noSpecialChars(str) {
const match = str.match(/[''@#$-/:-?{-~!"^_`'[']]/)
if (!match) return
throw new Error("got unsupported characters: " + match[0])
}
// prettier-ignore
const symbols = ["!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "+", "=", ".", ":", ";", "|","~","`","{","}","[","]","'"","'","<",">","?","/", "''"]
symbols.forEach((s) => {
it(`validates no symbol ${s}`, async () => {
expect(() => {
noSpecialChars(s)
}).toThrow();
})
})
(?='W_)(?='S).
呢?它检查.
匹配的字符不是一个单词字符(但_
是允许的),并且它不是空格。
注意:正如@Casimir et Hippolyte在另一条评论中指出的那样,这也将匹配诸如"之类的字符。如果您不期望这样的字符,那么这是一个工作的解决方案。
- 在<页眉>标签
- 如何更改<svg>标记为<img>用js标记
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- Ajax文件加载和<输入>文件加载
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 在.csv文件中写入学位符号
- 链接所有<a>Meteor
- 使用相同的数据集绘制各种符号
- 在<输入类型=“;文件“/>
- Div根据<选择>菜单
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- 如何首先设置样式<td>表中包含在窗体中的元素
- 通过点击<李>在jQuery中
- 正在检测导航到<a name=“;最新主题”></a>
- 将插入符号位置移动到ContentEditable<DIV>
- jquery仅限<并且>文本框中的符号
- gruntjs理解语法-<%=小于百分比符号
- 我必须写Regex,它只允许@#$%作为特殊符号,而不允许其他人像><`~符号
- 正则表达式匹配符号:! $ % ^和 ;*()_+|~-=`{}[]:& ”;& # 39;& lt; ?,./
- 如何将项目符号列表添加到我的java脚本代码中.此外,我如何将用户输入居中,如<居中>但使用javascri