2011-09-13 44 views
7

Tôi đang cố gắng xác thực biểu mẫu bằng cụm từ thông dụng được tìm thấy tại đây http://regexlib.com/. Những gì tôi đang cố gắng làm là lọc ra tất cả các ký tự ngoại trừ a-z, dấu phẩy và dấu nháy đơn. Nếu tôi sử dụng mã này:Thoát dấu nháy đơn trong regex?

<cfinput name="FirstName" type="text" class="fieldwidth" maxlength="90" required="yes" validateat="onsubmit,onserver" message="Please ensure you give your First Name and it does not contain any special characters except hyphens or apostrophes." validate="regular_expression" pattern="^([a-zA-Z'-]+)$" /> 

Tôi gặp lỗi sau: Chưa khớp [] trong biểu thức. Tôi đã tìm ra điều này liên quan đến các dấu nháy đơn vì nó hoạt động nếu tôi sử dụng mã này (nhưng không cho phép dấu nháy):

<cfinput name="FirstName" type="text" class="fieldwidth" maxlength="90" required="yes" validateat="onsubmit,onserver" message="Please ensure you give your First Name and it does not contain any special characters except hyphens or apostrophes." validate="regular_expression" pattern="^([a-zA-Z-]+)$" /> 

Vì vậy, tôi đang tự hỏi là có một số cách đặc biệt để thoát khỏi dấu nháy khi sử dụng biểu thức thông thường?

EDIT

Tôi nghĩ rằng tôi đã tìm thấy nơi mà vấn đề đang được gây ra (nhờ xanatos), không chắc chắn làm thế nào để sửa chữa nó. Về cơ bản CF đang tạo ra một lĩnh vực tiềm ẩn để xác nhận lĩnh vực này như sau:

<input type='hidden' name='FirstName_CFFORMREGEX' value='^([a-zA-Z'-]+)$'> 

Bởi vì nó được sử dụng dấu nháy đơn chứ không phải là dấu bài phát biểu quanh giá trị, nó được giải thích dấu nháy đơn như sự kết thúc của giá trị.

+0

Các dấu nháy đơn là một nhân vật đặc biệt và cần phải được thoát khỏi văn bản chuẩn bằng cách đặt trước với ' \ ', hãy thử mẫu = "^ ([a-zA-Z \' -] +) $" HTH – John

+1

@John Bạn có chắc không? Và nó có nghĩa là gì? Làm thế nào nó được sử dụng trong ngôn ngữ Regex? – xanatos

+0

Tôi nói 'thử' vì vậy tôi không chắc chắn, regex có nhiều hương vị, và thay thế biểu thức được gắn thẻ là trong thực tế, vắng mặt từ chương trình Word 2002 của tôi. – John

Trả lời

7

Tôi nghĩ rằng có lỗi trong triển khai cfinput. Nó có thể sử dụng chuỗi bạn vượt qua trong mẫu trong một Javascript Regex nhưng nó sử dụng ' để trích dẫn nó. Vì vậy, nó chuyển đổi nó trong:

new Regex('^([a-zA-Z'-]+)$') 

Hãy thử thay thế báo giá với \x27 (đó là mã cho dấu nháy đơn)

+0

Cảm ơn vì xanato, thật không may là nó cũng không hoạt động. Việc xác thực Javascript thực sự hoạt động tốt với bản gốc của tôi nhưng đó là xác thực phía máy chủ nơi mà vấn đề là. Nếu tôi không hiểu thêm về điều này, tôi có thể thử viết một cái gì đó để xác thực nó ở phía máy chủ. – Kristian82

+0

@ Kristian82 Hãy thử cái này :-) – xanatos

+1

Nhận xét của tôi không có ý nghĩa gì bây giờ, cảm ơn rất nhiều ... – Kristian82

0

Chưa từng có] là do dấu gạch nối được coi là phạm vi giữa hai ký tự xung quanh nó. Đặt dấu nối ở đầu như là một thực hành tốt nhất.

^([-a-zA-Z']+)$ 
+2

Đưa nó đến cùng là thực hành tốt như nhau, không có sự khác biệt ở đây. – stema

Các vấn đề liên quan