2012-02-21 25 views
5

Tôi không phải là một chàng trai regex, vì vậy tôi cần một chút giúp đỡ, chỉ không thể được đầu của tôi xung quanh này ...REGEX - Trận ký tự đặc biệt bất cứ nơi nào trong chuỗi

Tôi viết trang đăng ký và sử dụng asp.net trình xác thực. Tôi cần một validator regex để phù hợp với một nhân vật đặc biệt bất cứ nơi nào trong một từ, do đó, nó sẽ đáp ứng yêu cầu mà nói rằng "ID phải có ít nhất một ký tự đặc biệt." Các ký tự được phép là: ! "#% & '($) * +, - /:;.? < => @ [\]^ _' {|} ~

Một lần nữa, tôi là một cơ sở, và gặp vấn đề với gói đầu của tôi xung quanh công cụ này tại thời điểm này ...

để bây giờ tôi có

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

nhưng nó phù hợp với con số cũng vì một lý do, và đôi khi không phù hợp với nhân vật trong phần đầu của từ này. ..

Vì vậy, , xin vui lòng, nếu có ai có thể giúp tôi với điều đó ...

+0

tôi ghét trang web yêu cầu id và mật khẩu để chứa các ký tự đặc biệt –

+0

Chỉ cần một phụ lưu ý:. nếu bạn đang kiện ASP.NET thành viên, bạn có thể sử dụng ['MinRequiredNonAlphanumericCharacters'] (http://msdn.microsoft.com/en-us/library/system.web.security.membership .minrequirednonalphanumericcharacters.aspx) -property để đảm bảo rằng ký tự đặc biệt được nhập vào mật khẩu. –

+0

@TimSchmelter - noooo, không kiện Microsoft :) Lý do tại sao tôi không thể sử dụng điều này trong nhà cung cấp thành viên, bởi vì xác nhận này sẽ là tùy chọn - nó có thể được bật hoặc tắt, tùy thuộc vào nhu cầu của khách hàng ... và chúng tôi sẽ không có thể thực thi nó cho tất cả khách hàng của ứng dụng của chúng tôi. Cảm ơn cho các lưu ý bên mặc dù .. – Alex

Trả lời

4

Bạn cần phải thoát '-' và '!'

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

yeah..i bỏ qua điều đó ... tuy nhiên, đối với một số lý do chuỗi như "asdf3! #" Doe không muốn xác nhận bằng cách sử dụng biểu thức của bạn ... có lẽ nó có cái gì để làm với. ... – Alex

+0

Có vẻ như bạn cần phải trốn thoát! cũng như – David

2

Nó sẽ được dễ dàng hơn để làm điều ngược lại

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

nó có một nhân vật đặc biệt nếu nó không phù hợp với

+1

không thể sử dụng, nó sẽ khớp với các ký tự không được xác định trong các ký tự mà tôi cần, chẳng hạn như spades hoặc ký hiệu tiền tệ ... – Alex

+2

theo cách đó, có lẽ điều này sẽ tốt hơn [^ a-zA-Z0- 9] – BigMan

+0

Thậm chí tốt hơn nên loại trừ các khoảng trắng quá '[^ a-zA-Z0-9 \ s]' –

-4

Bạn có thể tìm hiểu thêm về regex ở đây: http://regex.learncodethehardway.org/

không khó như vậy;

chúc may mắn;

+0

cảm ơn cho liên kết, tôi sẽ xem xét này – Alex

+0

rtfm tốt đẹp, nhưng không thực sự – Letseatlunch

+2

SO không phải là cho câu trả lời RTFM. – toobulkeh

1

Không phải là chuyên gia về asp.net hoặc xác thực. Tuy nhiên, các lớp nhân vật chỉ cần một số ký tự nhất định được thoát như []. Dấu gạch ngang - đại diện cho một loạt các ký tự. Nếu được sử dụng như là một chữ, nó có thể được thoát ra và đặt bất cứ nơi nào, hoặc có thể được đặt ở đầu hoặc cuối của lớp học ([-aa] hoặc [aa-]) và được coi là một chữ. Ngoài ra, một dấu mũ ở đầu lớp, biểu thị ý nghĩa của lớp học “tiêu cực”, bất kỳ ký tự nào, nhưng các ký tự này ([^not me]).

Có thể có các cấu trúc khác trong các lớp có cú pháp đặc biệt duy nhất cho một công cụ cụ thể (.NET có thể theo cách này, tôi không chắc chắn). Một số trình tự kích hoạt một phân lớp quá tôi đoán.

Đây là trường hợp thử nghiệm của tôi với trình xác thực asp.net bằng các ký tự đặc biệt của bạn. Họ có thể là relavent tôi không chắc chắn. Cả hai dường như không xác nhận đầu vào trống, điều này có thể không phải là một điều regex.

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

Điều này dường như quan tâm đến vấn đề bảo mật nếu vấn đề đó xảy ra. Lưu ý các <+'alpha char' nơi 'alpha' đề cập đến một loạt các ký tự unicode hợp lệ theo một số tiêu chuẩn tôi nghĩ.

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

Chỉ cần bỏ qua nếu đây là cách tắt.

0

Bạn có thể cắt giảm xuống một chút và khớp các dải ký tự. Ví dụ, điều này phù hợp với tất cả các ký tự đặc biệt (và in) (bao gồm cả unicode) nhân vật:

[^\p{L}] 

Tôi cho rằng nếu bạn cần phải phù hợp 1 hoặc hơn, như là cụ thể cho trường hợp của bạn, sau đó điều này sẽ làm việc tốt (Lưu ý rằng các nhà điều hành + regex là viết tắt cho {1,}

[^\p{L}]+ 
Các vấn đề liên quan