2013-01-31 41 views
5

Tôi có yêu cầu để cho phép tự chữ và số và một số nhân vật khác trong một lĩnh vực. Tôi đang sử dụng biểu thức chính quy này:RegEx để bao gồm cả chữ và số và ký tự đặc biệt

"^[[email protected]#$&()-`.+,/\"]*$". 

Các ký tự đặc biệt cho phép là ! @ # $ & () - ‘ ./+ , “

Nhưng khi tôi thử nghiệm mô hình với một chuỗi "test_for_extended_alphanumeric", chuỗi vượt qua bài kiểm tra. Tôi không có "_" cho phép trong mẫu. Tôi đang làm gì sai?

Trả lời

6

Bạn cần phải thoát khỏi dấu nối:

"^[[email protected]#$&()\\-`.+,/\"]*$" 

Nếu bạn không thoát khỏi nó thì nó có nghĩa là một loạt các nhân vật, như a-z.

+0

Cảm ơn đã phản ứng nhanh chóng. Điều đó đã giúp. –

0

Dấu nối trong các lớp nhân vật biểu thị một loạt trừ khi chúng được thoát hoặc lúc bắt đầu hoặc kết thúc của lớp nhân vật. Nếu bạn muốn bao gồm dấu gạch nối, nó thường là một ý tưởng tốt để đặt chúng ở phía trước, do đó bạn thậm chí không cần phải lo lắng về việc thoát:

^[[email protected]#$&()`.+,/\"]*$ 

Bằng cách này, _ không thực sự rơi giữa ) và backtick trong ASCII:

http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters

0

trong lớp nhân vật của bạn những )-' được hiểu như là một loạt trong cùng một cách như ví dụ a-z, nó do đó đề cập đến bất kỳ ký tự với một mã ASCII thập phân từ 41 đến 96 )'.

Kể từ _ có mã 95, nó nằm trong phạm vi cho phép và do đó, cũng như <, =, >, vv

Để tránh điều này bạn có thể thoát khỏi -, tức là \-, hoặc đưa - tại hoặc khi bắt đầu hoặc kết thúc của lớp nhân vật:

/^[[email protected]#$&()`.+,/"-]*$/ 

không cần để thoát khỏi ", và lưu ý rằng bởi vì bạn đang sử dụng * lượng hóa, một e chuỗi mpty cũng sẽ vượt qua bài kiểm tra.

0

Sử dụng regex này, thao tác này sẽ hoạt động.

/\ S ([0-9] [a-zA-Z] [\ sa-zA-Z] [0-9] *) ([A-Za-z0-9! @ # $ % _ '' "" \^\ & * -. \] {1,20}) $/

0

làm thế nào về điều này .. cho phép ký tự đặc biệt và cũng như alpha số

"[-~]*$" 
0

? Bởi vì tôi không biết có bao nhiêu ký tự đặc biệt tồn tại, rất khó để kiểm tra chuỗi chứa ký tự đặc biệt theo danh sách trắng. Nó có thể là hiệu quả hơn để kiểm tra chuỗi chỉ chứa bảng chữ cái hoặc số.

ví dụ Kotlin

fun String.hasOnlyAlphabetOrNumber(): Boolean { 
    val p = Pattern.compile("[^a-zA-Z0-9]") 
    if (p.matcher(this).matches()) return false 
    return true 
} 

cho swift4

func hasOnlyAlphabetOrNumber() -> Bool { 
    if self.isEmpty { return false } 
    do { 
     let pattern = "[^a-zA-Z0-9]" 
     let regex = try NSRegularExpression(pattern: pattern, options: .caseInsensitive) 
     return regex.matches(in: self, options: [], range: NSRange(location: 0, length: self.count)).count == 0 
    } catch { 
     return false 
    } 
} 
Các vấn đề liên quan