2012-02-21 23 views
5

No soy un tipo de expresiones regulares, por lo que necesito un poco de ayuda, simplemente no puedo conseguir mi cabeza alrededor de esto ...de REGEX - Unir carácter especial en cualquier lugar en la cadena de

estoy escribiendo página de registro y el uso de asp.net validadores. Necesito un validador de expresiones regulares para que coincida con un carácter especial en cualquier lugar dentro de una palabra, por lo que cumplirá con el requisito que dice que "ID debe tener al menos un carácter especial". Los caracteres permitidos son: ! "#% & '($) * +, - /:;.? < => @ [\]^ _` {|} ~

Una vez más, soy un subalterno, y que tienen problemas con la envoltura mi cabeza alrededor de esto en este momento ...

por ahora no tengo

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

pero coincide con los números así por alguna razón, ya veces no coinciden con los personajes en el comienzo de la palabra. ..

So , por favor, si alguien me puede ayudar con eso ...

+0

odio sitios web que requieren identificaciones y contraseñas para contener caracteres especiales –

+0

Sólo un lado. nota: Si usted está demandando a ASP.NET afiliación, usted podría utilizar el ['MinRequiredNonAlphanumericCharacters'] (http://msdn.microsoft.com/en-us/library/system.web.security.membership .minrequirednonalphanumericcharacters.aspx) -property para garantizar que se introduzcan caracteres especiales en la contraseña. –

+0

@TimSchmelter - noooo, no demandó a Microsoft :) La razón por la que no puedo usar esto en el proveedor de membresía, es porque esta validación será opcional; puede activarse o desactivarse, dependiendo de las necesidades del cliente ... y no lo haremos ser capaz de aplicarlo para todos los clientes de nuestra aplicación. Gracias por la nota al margen, aunque .. – Alex

Respuesta

4

Tienes que escapar '-' y '!'

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

sí ... pasé por alto que ... sin embargo, por alguna razón la cadena como "asdf3! #" No quiere validar el uso de su expresión ... tal vez tiene algo que ver con .net ... – Alex

+0

¡Parece que necesitas escapar! así como – David

2

Sería más fácil hacer lo contrario

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

tiene un carácter especial si no coincide con

+1

no puedo usar esto, coincidirá con los caracteres que no están definidos en el conjunto de caracteres que necesito, como picas o signos de moneda ... – Alex

+2

de esa manera, tal vez este sea mejor [^ a-zA-Z0- 9] – BigMan

+0

Aún mejor sería excluir espacios en blanco también '[^ a-zA-Z0-9 \ s]' –

1

No es un asp.net o experto en validación. Pero, las clases de caracteres solo necesitan ciertos caracteres escapados como []. El guión - representa un rango de caracteres. Si se usa como un literal, puede escaparse y colocarse en cualquier lugar, o puede colocarse al principio o al final de la clase ([-aa] o [aa-]) y tratarse como un literal. Además, un símbolo de intercalación al comienzo de la clase denota un significado de clase "negativo", cualquier carácter excepto estos ([^not me]).

Puede haber otras construcciones en clases con sintaxis especial única para un motor en particular (.NET puede ser de esta manera, no estoy seguro). Ciertas secuencias desencadenan una subclase también, supongo.

Aquí están mis casos de prueba con el validador asp.net usando sus caracteres especiales. Pueden ser relavent, no estoy seguro. Ambos parecen no validar la entrada en blanco, esto puede no ser una expresión regular.

<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" /> 

Parece que este se ocupa de un problema de seguridad si eso es importante. Tenga en cuenta el <+'alpha char' donde 'alfa' se refiere a un rango de caracteres Unicode válidos según algunos estándares, creo.

<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" /> 

Simplemente ignore si esto está fuera de lugar.

0

Puede reducir esto un poco y hacer coincidir los rangos de caracteres. Por ejemplo, esto coincide con todos los caracteres especiales (e imprimibles) (incluyendo Unicode):

[^\p{L}] 

supongo que si usted necesita para que coincida con 1 o más, ya que es específica para su caso, entonces esto funcionaría así (Tenga en cuenta que el operador + expresión regular es la abreviatura de {1,}

[^\p{L}]+ 
Cuestiones relacionadas