匹配符号的正则表达式:!$%^&*()_+|~-=`[]:";'<>?,./

     2023-02-22     35

关键词:

【中文标题】匹配符号的正则表达式:!$%^&*()_+|~-=`[]:";\'<>?,./【英文标题】:Regex to Match Symbols: !$%^&*()_+|~-=`[]:";'<>?,./匹配符号的正则表达式:!$%^&*()_+|~-=`[]:";'<>?,./ 【发布时间】:2012-01-11 16:09:54 【问题描述】:

我正在尝试在 JavaScript 中创建一个正则表达式测试,该测试将测试一个字符串是否包含以下任何字符:

!$%^&*()_+|~-=`[]:";'<>?,./

如果您有兴趣了解更多信息 :)

这是我正在开发的一个非常酷的密码更改应用程序。如果您有兴趣,这里是其余的代码。

我有一个列出密码要求的表格,当最终用户键入新密码时,它将测试一个正则表达式数组并在相应的表格行中放置一个复选标记,如果它...签出 :) 我只需要添加这个来代替 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);


是的,还有相应的服务器端验证!

【问题讨论】:

很有趣,你的问题的答案在于标题,除了转义特殊字符和包含正斜杠。 为什么不使用.addClass("check").removeClass("check")?在代码中看到if (someBoolean == true) 总是让我畏缩。只需执行if (someBoolean)。或者,更好的是,只需 $(".form table tr").eq(i+1).toggleClass("check", !!this); valid = valid &amp;&amp; !!this; +1 @gill3 感谢代码审查 - 确实有很好的反馈。我过去使用过这些速记方法。 @gilly3,它似乎在 FF 中运行良好,但在 IE8 中。喜欢这个速记。我试图弄清楚 IE8 的不同之处。 【参考方案1】:

(?=\W_)(?=\S). 怎么样?它检查与. 匹配的字符不是单词字符(但是_ 是允许的)并且它不是空格。

注意:正如@Casimir et Hippolyte 在另一条评论中指出的那样,这也将匹配 é 等字符。如果您不希望出现这样的字符,那么这是一个可行的解决方案。

【讨论】:

【参考方案2】:

完成此任务的最简单和最短的方法:

/[^\pL\d\s@#]/u

说明

[^...]匹配下面列表中不存在的单个字符

\pL => 匹配来自任何语言的任何类型的字母

\d => 匹配数字 0 到 9

\s => 匹配任何类型的隐形字符

@# => @# 字符

别忘了传递u(unicode)标志。

【讨论】:

不需要 ^ 来表示不需要吗? @Webber 不,他们是大写字母,这使得声明是否定的。当我们使用小写字母\w\s时需要^ 这不是将它解释为在w 之外或s 之外,并且由于这两者并没有真正相交,它只是让所有字符通过? (因此不过滤任何东西。) @Zael 你说得对,正则表达式 (/[\W\S]/) 确实让一切都通过了。 [^\w\s] 是我认为 Amir 得到的更准确的表示。在前者中,正则表达式是说“匹配任何不是字母数字 OR 也不是空格的东西”,正如你所提到的,让我们完成所有事情,因为字母数字字符不是空格,反之亦然。后者表示“匹配任何不是字母数字 AND 且不是空格的内容”。当然,例外情况适用于重音字符(如À)与[^\w\s] 匹配。 这不包括_字符【参考方案3】:

回答

/[\W\S_]/

说明

这将创建一个字符类,删除单词字符、空格字符并添加下划线字符(因为下划线是“单词”字符)。剩下的就是特殊字符。大写字母代表小写字母的否定。

\W 将选择所有等同于[^a-zA-Z0-9_] 的非“单词”字符\S 将选择所有等同于[ \t\n\r\f\v] 的非“空白”字符_ 将选择“_”,因为我们在使用\W时将其取反,需要重新添加

【讨论】:

MikeSchem,你刚刚带我穿越了时光机。 是的,我注意到了。很旧,但我觉得没有发布最简单的答案。 这与下面下划线失败的答案有何不同? @MikeSchem 你提前旅行了。非常简单和甜蜜【参考方案4】:

实现这一点的一个简单方法是负集 [^\w\s]。这基本上抓住了:

任何非字母数字字符(字母和数字) 任何非空格、制表符或换行符(统称为空格)

由于某种原因,[\W\S] 的工作方式不同,它不进行任何过滤。 Zael 对其中一个答案的评论提供了某种解释。

【讨论】:

不,缺少下划线,所有超出 ascii 范围的字符和 ascii 范围内的大多数控制字符都将匹配此类。 /[^\w\s]/.test('é') # true, /[^\w\s]/.test('_') # false.【参考方案5】:
// 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);
  ;

【讨论】:

当您可以只使用正则表达式文字时,不要使用 RegExp 构造函数。逃避工作要少得多(无论如何大部分都是不必要的),而且效率也更高。 既然可以直接匹配字符,为什么还要使用复杂的前瞻? 你能举个例子@Bergi吗?我不明白你的建议。【参考方案6】:

将“A”中任何语言的所有后者替换为 0,例如,如果您希望将所有数字替换为 0:

return str.replace(/[^\s!-@[-`-~]/g, "A").replace(/\d/g, "0");

【讨论】:

你在回答什么问题?【参考方案7】:

这个的正则表达式非常简单。只需使用字符类。连字符是字符类中的特殊字符,所以需要放在首位:

/[-!$%^&*()_+|~=`\[\]:";'<>?,.\/]/

您还需要转义其他正则表达式元字符。

编辑: 连字符很特殊,因为它可以用来表示一系列字符。这个相同的字符类可以通过范围简化为:

/[$-/:-?-~!"^_`\[\]]/

共有三个范围。 '$' 到 '/',':' 到 '?',以及 '' 到 '~'。最后一个字符串不能用范围更简单地表示:!"^_`[]。

使用ACSII table 查找字符类的范围。

【讨论】:

为什么没有提到量词 \Q 和 \E 来转义字符序列? 在找到这个解决方案之前,我一直在走字符类排除路线:匹配除 alpha、数字、空格等之外的所有内容。 连字符必须在前是常识吗?我已经阅读了几十个 SO 答案和正则表达式备忘单,这是我第一次听说它。你的回答为我节省了很多戏剧性。谢谢! @SerG \Q\E 在 JS RegExp 引擎中不起作用:( /^\Q.\E$/.test('Q+E'); // true @q4w56 反斜杠不在原始问题中指定的字符集中,因此不匹配的反斜杠是正确的。 :)

正则表达式&re模块

正则表达式:功能:字符串模糊匹配查询元字符:.,^,$,*,+,?,{},[],|(),.通配符点:匹配除换行符以外的任意一个符号^:只匹配字符串的开始位置$:只匹配字符串的末尾位置*:重复(0,+∞)+:重复[1,+∞)?:重复[0,1]{}:重复指定... 查看详情

正则表达式常用符号说明

正则表达式常用符号(*+?.^$\\|等)练习:1、[0-9A-Za-z_]可以匹配一个数字、字母或者下划线。2、[0-9A-Za-z_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,如‘1_2’、‘a2b’等。3、[a-zA-Z_][0-9a-zA-Z_]*... 查看详情

java_正则表达式&时间日期

正则表达式1.概念正则表达式(英语:RegularExpression,在代码中常简写为regex)。正则表达式是一个字符串,使用单个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串。在开发中,正则表达式通常被用来... 查看详情

正则匹配的中文包括中文标点符号吗?

参考技术A不一定的,需要依表达式范围而定,例如:[\\u4e00-\\u9fa5]可以识别出任何汉字,但不包含如:\\u3002(匹配中文句号)。解析:“[\\u3002\\uff1b\\uff0c\\uff1a\\u201c\\u201d\\uff08\\uff09\\u3001\\uff1f\\u300a\\u300b] ”该表达式可以识别... 查看详情

正则匹配的中文包括中文标点符号吗?

不一定的,需要依表达式范围而定,例如:[\\u4e00-\\u9fa5]可以识别出任何汉字,但不包含如:\\u3002(匹配中文句号)。解析:“[\\u3002\\uff1b\\uff0c\\uff1a\\u201c\\u201d\\uff08\\uff09\\u3001\\uff1f\\u300a\\u300b] ”该表达式可以识别出:。;... 查看详情

Ruby PDF::Reader 使用正则表达式匹配项目符号

】RubyPDF::Reader使用正则表达式匹配项目符号【英文标题】:RubyPDF::ReadermatchingbulletpointwithRegex【发布时间】:2016-03-2920:23:26【问题描述】:我已经用PDF::Reader在Ruby中解析了一个pdf文档。pdf文件的要点在我的解析文本中显示为一个... 查看详情

正则表达式匹配

今天项目需要将一段话中网址选出来所以找了一些正则表达式,以后遇到继续增加  1.匹配规范网址:(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]      2,匹配不规范的网址,比如前面没有http://等一些,... 查看详情

正则表达式匹配url

正则表达式:varmatch=/^((ht|f)tps?)://([w-]+(.[w-]+)*/)*[w-]+(.[w-]+)*/?(?([w-.,@?^=%&:/~+#]*)+)?/;/*注:(1)、如需允许其他联接方式,可以修改“(ht|f)tps?”部分,在“?”后面跟上符号“|”,然后加上您需要的联接方式,多个时用符号“|”分... 查看详情

Robotframework - 在python中工作的正则表达式不匹配

】Robotframework-在python中工作的正则表达式不匹配【英文标题】:Robotframework-regexworkinginpythonnotmatching【发布时间】:2021-12-2021:23:14【问题描述】:我有以下字符串:https://m.facebook.com/story.php?story_fbid=123345&id=12334&__xts__%5B0%5D=12.... 查看详情

正则表达式

正则表达式元字符是包含特殊含义的字符。它们有一些特殊功能,可以控制匹配模式的方式。反斜杠后的元字符将失去其特殊含义。字符类:单个字符和数字元字符/元符号匹配情况.匹配除换行符外的任意字符[a-z0-9]匹配括号中... 查看详情

匹配逗号 - 正则表达式

】匹配逗号-正则表达式【英文标题】:Matchuptothecomma-Regex【发布时间】:2021-07-3116:19:02【问题描述】:我创建了一个正则表达式模式(?&lt;=[TCC|TCC_BHPB]\\s\\d3,4)[-_\\s]\\d1,2[,]这个模式匹配只是:TCC6005_5,我应该改变什么来匹配这两... 查看详情

正则表达式简单语法

基本符号:^ 表示匹配字符串的开始位置 (例外 用在中括号中[]时,可以理解为取反,表示不匹配括号中字符串)$ 表示匹配字符串的结束位置* 表示匹配零次到多次+ 表示匹配一次到多次(至少有一次)? 表示... 查看详情

正则表达式匹配字母和数字,其中一些符号可以出现在它们之间

】正则表达式匹配字母和数字,其中一些符号可以出现在它们之间【英文标题】:Regularexpressiontomatchlettersanddigits,wheresomesymbolscanappearbetweenthem【发布时间】:2021-10-2806:54:54【问题描述】:我正在尝试创建一个正则表达式来匹配字... 查看详情

正则表达式&nbsp;总结

正则表达式:  1.元字符(*、?、+)和文字字符组成  2.#匹配的是一个位置     脱字符号(^):行开始     美元符号($):行结束        3.#匹配若干字符之一,字符间是‘或’关系,字符组内部和外部,... 查看详情

常用正则表达式

匹配中文字符:[u4e00-u9fa5]匹配双字节字符(包括汉字在内):[^x00-xff]匹配空白行: s* 匹配Email地址:[w!#$%&‘*+/=?^_`{|}~-]+(?:.[w!#$%&‘*+/=?^_`{|}~-]+)*@(?:[w](?:[w-]*[w])?.)+[w](?:[w-]*[w])?匹配国内电话号码:d{3}-d{ 查看详情

第六章正则表达式

1,if匹配  if($regu=~m/expression/){ }       #正则表达式m可省略,也可使用$_,即if(/expression/),相当于$regu=$_;省略匹配符=~和m 2,匹配+&&print  if($line=~m"(w+)"){print"$l ";}等同于:($line=~m"(w+)")&&( 查看详情

正则表达式符号解释

正则表达式全部符号解释 字符描述将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,‘n‘匹配字符"n"。‘ ‘匹配一个换行符。序列‘\‘匹配""而"("则匹配"("。^匹配输入字符... 查看详情

正则表达式匹配逗号不在分组符号之间

】正则表达式匹配逗号不在分组符号之间【英文标题】:Regextomatchcommanotbetweengroupingsymbols【发布时间】:2011-09-0205:44:14【问题描述】:我需要一个正则表达式来匹配不在“[”和“]”或“(”和“)”或“”和“”之间的逗号。其... 查看详情