8 đến 20 ký tự là gì

Biểu thức chính quy mà bạn đang theo đuổi rất hoàn toàn có thể sẽ rất lớn và là cơn ác mộng cần duy trì đặc biệt quan trọng so với những người không quen thuộc với những biểu thức thường thì .Tôi nghĩ rằng sẽ thuận tiện hơn để phá vỡ regex của bạn và làm điều đó từng chút một. Nó hoàn toàn có thể mất thêm một chút ít để làm, nhưng tôi khá chắc như đinh rằng việc duy trì và gỡ lỗi nó sẽ thuận tiện hơn. Điều này cũng sẽ được cho phép bạn phân phối nhiều thông tin lỗi được khuynh hướng hơn cho người dùng của mình ( ngoài Invalid Password ) để cải tổ thưởng thức người dùng .Từ những gì tôi thấy bạn khá thông thuộc regex, thế cho nên tôi cho rằng việc cho bạn những biểu thức chính quy để làm những gì bạn cần sẽ là vô ích .

Xem bình luận của bạn, đây là cách tôi sẽ đi về nó:

Bạn đang đọc: 8 đến 20 ký tự là gì

  • Phải dài tám ký tự: Bạn không cần regex cho việc này. Sử dụng thuộc tính .Length là đủ.
  • Bao gồm một chữ cái viết hoa: Bạn có thể sử dụng biểu thức chính quy [A-Z]+. Nếu chuỗi chứa ít nhất một chữ cái viết hoa, biểu thức chính quy này sẽ mang lại true.
  • Một ký tự đặc biệt: Bạn có thể sử dụng \W sẽ khớp với bất kỳ ký tự nào không phải là chữ cái hoặc số hoặc người nào khác, bạn có thể sử dụng một cái gì đó giống như vậy [!@#] để chỉ định danh sách tùy chỉnh các ký tự đặc biệt. Lưu ý rằng các ký tự như $, ^, ( và ) là các ký tự đặc biệt trong ngôn ngữ biểu thức chính quy, vì vậy chúng cần được thoát như vậy: \$. Vì vậy, trong ngắn hạn, bạn có thể sử dụng \W.
  • Các ký tự chữ và số: Sử dụng \w+ phải khớp với bất kỳ chữ cái và số nào và gạch dưới.

Hãy xem này hướng dẫn để biết thêm thông tin .( # Start of group ( ? =. * \ d ) # must contain at least one digit ( ? =. * [ A-Z ] ) # must contain at least one uppercase character ( ? =. * \ W ) # must contain at least one special symbol. # match anything with previous condition checking { 8,8 } # length is exactly 8 characters ) # End of groupTrong một dòng : ( ( ? =. * \ d ) ( ? =. * [ A-Z ] ) ( ? =. * \ W ). { 8,8 } )

Mục lục bài viết

Nguồn:

  • Biểu thức khớp mật khẩu
  • Xác thực cường độ mật khẩu với các biểu thức thông thường

Rất nhiều câu vấn đáp …. tổng thể đều xấu !Các biểu thức thường thì không có toán tử AND, thế cho nên thật khó để viết một biểu thức chính tương thích với mật khẩu hợp lệ, khi tính hợp lệ được xác lập bởi một cái gì đó VÀ một cái gì khác VÀ một cái gì khác …Nhưng, những biểu thức chính quy do có toán tử OR, vì thế chỉ cần vận dụng định lý DeMorgan và viết một biểu thức chính tương thích với mật khẩu không hợp lệ .

bất cứ thứ gì có ít hơn 8 ký tựHOẶCbất cứ thứ gì không có sốHOẶCbất cứ thứ gì không có chữ hoaHOẶCbất cứ thứ gì không có ký tự đặc biệt

Vì thế : ^ (. { 0,7 } | [ ^ 0-9 ] * | [ ^ A-Z ] * | [ a-zA-Z0-9 ] * ) USDNếu bất kỳ điều gì tương thích với điều đó, thì đó là mật khẩu không hợp lệ .Như một ví dụ làm thế nào điều này hoàn toàn có thể được triển khai với một regex hoàn toàn có thể đọc / duy trì được .Đối với regex dài hơn, bạn phải luôn sử dụng RegexOptions. IgnorePatternWhitespace để cho phép khoảng chừng trắng và nhận xét trong biểu thức để dễ đọc hơn. String [ ] passwords = { ” foobar “, ” Foobar “, ” Foobar1 “, ” Fooobar12 ” } ; foreach ( String s in passwords ) { Match password = Regex. Match ( s, @ ” ^ # Match the start of the string ( ? =. * \ p { Lu } ) # Positive lookahead assertion, is true when there is an uppercase letter ( ? =. * \ P { L } ) # Positive lookahead assertion, is true when there is a non-letter \ S { 8, } # At least 8 non whitespace characters $ # Match the end of the string “, RegexOptions. IgnorePatternWhitespace ) ; if ( password. Success ) { Console. WriteLine ( s + ” : valid ” ) ; } else { Console. WriteLine ( s + ” : invalid ” ) ; } } Console. ReadLine ( ) ;Câu vấn đáp là không sử dụng biểu thức chính quy. Đây là bộ và đếm .

Biểu thức thông thường là về thứ tự.

Trong đời sống của bạn là một lập trình viên, bạn sẽ nhu yếu làm nhiều việc không có ý nghĩa. Học để đào một Lever sâu hơn. Tìm hiểu khi câu hỏi sai .Câu hỏi ( nếu nó đề cập đến những biểu thức chính quy ) là sai .Mã giả ( đã quy đổi giữa quá nhiều ngôn từ, trễ ) : if s.length < 8 : return False nUpper = nLower = nAlphanum = nSpecial = 0 for c in s : if isUpper ( c ) : nUpper + + if isLower ( c ) : nLower + + if isAlphanumeric ( c ) : nAlphanum + + if isSpecial ( c ) : nSpecial + + return ( 0 < nUpper ) and ( 0 < nAlphanum ) and ( 0 < nSpecial )Đặt cược bạn đã đọc và hiểu mã trên gần như ngay lập tức. Đặt cược bạn mất nhiều thời hạn hơn với regex, và ít chắc như đinh hơn là đúng. Mở rộng regex là rủi ro đáng tiếc. Mở rộng ngay lập tức ở trên, ít hơn nhiều như vậy .Cũng chú ý quan tâm rằng câu hỏi không đúng quy trình tiến độ. Bộ ký tự ASCII hay Unicode, hay ? ? Tôi đoán từ khi đọc câu hỏi là tối thiểu một ký tự chữ thường được giả sử. Vì vậy, tôi nghĩ rằng quy tắc ở đầu cuối được giả định nên là : return ( 0 < nUpper ) and ( 0 < nLower ) and ( 0 < nAlphanum ) and ( 0 < nSpecial )( Thay đổi mũ thành tập trung chuyên sâu vào bảo mật thông tin, đây là quy tắc thực sự gây phiền nhiễu / không hữu dụng. )Học cách biết khi câu hỏi sai là ồ ạt quan trọng hơn câu vấn đáp mưu trí. Một câu vấn đáp mưu trí cho câu hỏi sai gần như luôn luôn sai .Nếu bạn chỉ cần một chữ hoa và ký tự đặc biệt quan trọng thì nó sẽ hoạt động giải trí : @ " ^ ( ? =. { 8, } $ ) ( ? = [ ^ A-Z ] * [ A-Z ] [ ^ A-Z ] * $ ) \ w * \ W \ w * $ "Biểu thức chính quy mà bạn đang tìm kiếm là : / ^ ( ? =. * [ a-z ] ) ( ? =. * [ A-Z ] ) ( ? =. * [ 0-9 ] ) ( ? =. * [ ! @ # \ USD % \ ^ và \ * \ [ \ ] " \ ' ; : _ \ - < > \., = \ + \ / \ \ ] ). { 8, } $ / u .Ví dụ và kiểm tra : http://regexr.com/3fhr4Bạn hoàn toàn có thể sử dụng lớp dưới đây để xác nhận : public class PasswordValidator { private Pattern pattern ; private Matcher matcher ; private static final String PASSWORD_PATTERN = ” ( ( ? =. * \ \ d ) ( ? =. * [ a-z ] ) ( ? =. * [ A-Z ] ) ( ? =. * [ @ # USD % ] ). { 6,20 } ) ” ; public PasswordValidator ( ) { pattern = Pattern. compile ( PASSWORD_PATTERN ) ; } / * * * Validate password with regular expression * @ param password password for validation * @ return true valid password, false invalid password * / public boolean validate ( final String password ) { matcher = pattern.matcher ( password ) ; return matcher.matches ( ) ; } }trong đó 6 và 20 là độ dài tối thiểu và tối đa cho mật khẩu .Câu hỏi này mở màn được Viral và rất nhiều gợi ý mê hoặc Open .

Vâng, viết bằng tay rất khó. Vì vậy, một giải pháp dễ dàng hơn là sử dụng một mẫu. Mặc dù regex kết quả có thể không tối ưu nhất, nhưng việc duy trì và/hoặc thay đổi sẽ dễ dàng hơn và người dùng sẽ kiểm soát kết quả tốt hơn. Có thể là tôi đã bỏ lỡ điều gì đó, vì vậy bất kỳ lời chỉ trích mang tính xây dựng nào cũng sẽ hữu ích.

Liên kết này hoàn toàn có thể mê hoặc : khớp tối thiểu 2 chữ số 2 vần âm theo bất kể thứ tự nào trong chuỗi, Ngôn ngữ biểu thức chính quy, Nhóm bắtTôi đang sử dụng mẫu này ( ? = ( ? :. * ? ( { type } ) ) { ( { count } ) } ) dựa trên toàn bộ những biểu thức chính mà tôi đã thấy trong SO. Bước tiếp theo là thay thế sửa chữa mẫu thiết yếu ( number, special character … ) và thêm thông số kỹ thuật cho chiều dài .

Tôi đã tạo một lớp nhỏ để soạn regex PasswordRegexGenerator.cs Một ví dụ:string result = new PasswordRegexGenerator ( ) .UpperCase ( 3, -1 )    // … {3,} .Number ( 2, 4 )        // … {2,4} .SpecialCharacter ( 2 ) // … {2} .Total ( 8,-1 ) .Compose ( ); ///

/// Generator for regular expression, validating password requirements. ///

public class PasswordRegexGenerator { private string _elementTemplate = “(?=(?:.*?({type})){({count})})”; private Dictionary _elements = new Dictionary { { “uppercase”, “[A-Z]” }, { “lowercase”, “[a-z]” }, { “number”, @”\d” }, { “special”, @”\W” }, { “alphanumeric”, @”\w” } }; private StringBuilder _sb = new StringBuilder ( ); private string Construct ( string what, int min, int max ) { StringBuilder sb = new StringBuilder ( _elementTemplate ); string count = min.ToString ( ); if ( max == -1 ) { count += “,”; } else if ( max > 0 ) { count += “,” + max.ToString(); } return sb .Replace ( “({type})”, what ) .Replace ( “({count})”, count ) .ToString ( ); } ///

/// Change the template for the generation of the regex parts ///

/// the new template /// public PasswordRegexGenerator ChangeRegexTemplate ( string newTemplate ) { _elementTemplate = newTemplate; return this; } ///

/// Change or update the regex for a certain type ( number, uppercase … ) ///

/// type of the regex /// new value for the regex /// public PasswordRegexGenerator ChangeRegexElements ( string name, string regex ) { if ( _elements.ContainsKey ( name ) ) { _elements[ name ] = regex; } else { _elements.Add ( name, regex ); } return this; } #region construction methods ///

/// Adding number requirement ///

/// /// /// public PasswordRegexGenerator Number ( int min = 1, int max = 0 ) { _sb.Append ( Construct ( _elements[ “number” ], min, max ) ); return this; } public PasswordRegexGenerator UpperCase ( int min = 1, int max = 0 ) { _sb.Append ( Construct ( _elements[ “uppercase” ], min, max ) ); return this; } public PasswordRegexGenerator LowerCase ( int min = 1, int max = 0 ) { _sb.Append ( Construct ( _elements[ “lowercase” ], min, max ) ); return this; } public PasswordRegexGenerator SpecialCharacter ( int min = 1, int max = 0 ) { _sb.Append ( Construct ( _elements[ “special” ], min, max ) ); return this; } public PasswordRegexGenerator Total ( int min, int max = 0 ) { string count = min.ToString ( ) + ( ( max == 0 ) ? “” : “,” + max.ToString ( ) ); _sb.Append ( “.{” + count + “}” ); return this; } #endregion public string Compose () { return “(” + _sb.ToString ( ) + “)”; } }

Video liên quan

Source: https://mix166.vn
Category: Thủ Thuật

Xổ số miền Bắc