2012-02-21 55 views
5

中我不是一个正则表达式的家伙,所以我需要一点点帮助,只是不能让我解决这个头......正则表达式 - 任何地方比赛特殊字符的字符串

我写注册页面,并使用asp.net验证。我需要一个正则表达式验证器来匹配一个单词内任何地方的特殊字符,因此它将满足要求“ID必须至少有一个特殊字符”。允许的字符是: ! “#$%&'()* +, - /:;?< => @ [\]^ _`{|}〜

再一次,我的大三学生,并有问题与包装我的脑袋解决这个东西,在这一刻......

现在我有

[\[\]\^\$\.\|\?\*\+\(\)\\~`[email protected]#%&-_+={}'""<>:;, ]{1,} 

但它匹配的是数字,以及由于某种原因,有时不字开头的字符匹配。 ..

所以请,如果有人可以帮助我与...

+0

我讨厌那种需要ID和密码包含特殊字符的网站 – 2012-02-21 22:15:11

+0

只是一个侧面说明:如果你起诉ASP.NET会员,您可以使用['MinRequiredNonAlphanumericCharacters'](http://msdn.microsoft.com/en-us/library/system.web.security.membership .minrequirednonalphanumericcharacters.aspx)-property以确保在密码中输入特殊字符。 – 2012-02-21 22:19:52

+0

@TimSchmelter - noooo,不起诉微软:)为什么我不能在成员资格提供者中使用这个,是因为这个验证是可选的 - 它可以打开或关闭,这取决于客户的需求......我们不会能够为我们的应用程序的所有客户端强制执行它。谢谢你的旁注..虽然.. – Alex 2012-02-21 22:31:51

回答

4

你需要逃避“ - ”和“!”

[\[\]\^\$\.\|\?\*\+\(\)\\~`\[email protected]#%&\-_+={}'""<>:;, ]{1,} 
+0

是啊..我忽视了...然而,由于某种原因字符串asdf3!#“不想用你的表达来验证......也许它与某事有关.net ... – Alex 2012-02-21 22:28:07

+0

看起来你需要逃脱!以及 – David 2012-02-21 22:41:48

2

它会更容易做相反

^[0-9]|[a-z]|[A-Z]$

它有一个特殊的字符,如果它不匹配

+1

不能使用这个,它会匹配字符集中我没有定义的字符集,如黑桃或货币符号... – Alex 2012-02-21 22:29:05

+2

这样,也许这将会更好 [^ a-zA-Z0- 9] – BigMan 2014-04-23 09:09:21

+0

更好的办法是排除空格太''[^ a-zA-Z0-9 \ s]' – 2014-11-09 19:23:57

-4

您可以了解更多关于正则表达式的位置: http://regex.learncodethehardway.org/

这并不难做到;

祝你好运;

+0

感谢您的链接,我会看看这个 – Alex 2012-02-21 22:23:47

+0

rtfm不错,但不是真的 – Letseatlunch 2012-02-21 22:43:58

+2

SO是不适合RTFM的答案。 – toobulkeh 2014-03-22 00:59:38

1

不是asp.net或验证专家。但是,角色类仅需要某些字符,如[]。破折号-代表一系列字符。如果用作文字,它可以被转义并放在任何地方,或者可以放在课程的开始或结尾([-aa][aa-]),并被视为文字。此外,在课程开始处插入一个脱字号,表示“否定”类的含义,但是这些字符([^not me])。

有可能是在课堂上其他构造独特,以特定的发动机特殊的语法(.NET可能是这个样子,我不知道)。我猜想某些序列也触发了一个子类。

这里是我的测试情况下与使用特殊字符asp.net验证。他们可能是相关的,我不确定。两者似乎都不验证空白输入,这可能不是正则表达式。

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" 
     ControlToValidate="TextBox1" ErrorMessage="Input is not valid." 
     ValidationExpression="^.*[\[\]^$.|?*+()\\~`[email protected]#%&\-_+={}'&quot;&lt;&gt;:;,\ ].*$"></asp:RegularExpressionValidator> 
    <asp:Button ID="Button1" runat="server" Text="Button" /> 

这一个似乎照顾了一个安全问题,如果这相关。请注意0​​,其中'alpha'表示根据我认为符合某些标准的一系列有效unicode字符。

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" 
     ControlToValidate="TextBox1" ErrorMessage="Input is not valid." 
     ValidationExpression="^(?!.*&lt;(?:/|[A-Za-z_:])).*[\[\]^$.|?*+()\\~`[email protected]#%&\-_+={}'&quot;&lt;&gt;:;,\ ].*$"></asp:RegularExpressionValidator> 
    <asp:Button ID="Button1" runat="server" Text="Button" /> 

只是无视这种情况。

0

您可以稍微修剪一下并匹配字符范围。例如,这符合所有专(兼打印)字符(包括Unicode)字符:

[^\p{L}] 

我想,如果你需要匹配1或更多,因为是具体到你的情况,那么这将工作,以及(需要注意的是+正则表达式运算符是简写{1,}

[^\p{L}]+ 
相关问题