2008-08-27 42 views
8

Sau khi biểu mẫu web của tôi được gửi, một regex sẽ được áp dụng cho đầu vào của người dùng ở phía máy chủ (thông qua PHP). Tôi muốn có regex giống hệt nhau chạy trong thời gian thực ở phía máy khách để hiển thị cho người dùng biết đầu vào thực sự sẽ là gì. Điều này sẽ được khá nhiều giống như phần Xem trước trên các trang Hỏi câu hỏi trên Stack Overflow ngoại trừ với PHP trên back-end thay vì .NET.Tạo một regex JavaScript tương đương với một regex PHP

Tôi cần lưu ý điều gì để các biểu thức chính quy của PHP và JavaScript hoạt động giống hệt nhau?

Trả lời

1

Tôi nhận thấy rằng việc triển khai các cụm từ thông dụng khác nhau thường có những khác biệt nhỏ về chính xác những gì chúng hỗ trợ. Nếu bạn muốn hoàn toàn chắc chắn rằng kết quả sẽ giống nhau ở cả hai giao diện người dùng và phụ trợ, sự lựa chọn độc đáo nhất là thực hiện cuộc gọi Ajax tới chương trình phụ trợ PHP của bạn và sử dụng cùng một đoạn mã PHP cho cả hai đánh giá regex.

3

Nếu cụm từ thông dụng đơn giản thì sẽ không có vấn đề gì vì các khái niệm cơ bản của cụm từ thông dụng là phổ biến trên hầu hết các triển khai.

Đối cụ thể sau đó nó sẽ là tốt nhất để nghiên cứu cả hai hiện thực:

http://www.regular-expressions.info/php.html

http://www.regular-expressions.info/javascript.html

Javascripts thực hiện có lẽ là cơ bản hơn, vì vậy nếu bạn đang cho một cách tiếp cận mẫu số chung thấp nhất rồi nhắm vào cái đó.

1

@LKM AJAX là người chiến thắng rõ ràng tại đây. Điều này cũng sẽ cho phép bạn thực hiện theo nguyên tắc DRY. Tại sao bạn muốn viết mã phân tích cú pháp của mình trong Javascript PHP?

+5

Tại sao phải viết hai lần? Bởi vì nó sẽ chạy nhanh hơn cho người dùng và mất ít băng thông hơn. – TRiG

+3

Bạn không thể tin tưởng phía máy khách, nhưng bạn không muốn tạo một bản kiến ​​nghị HTTP nếu bạn không muốn, vì vậy cách tốt nhất là phân tích mã trong cả máy khách và máy chủ (chỉ phân tích cú pháp máy chủ được thực hiện bởi vì bạn không tin tưởng khách hàng!). – Adirael

0

Cả regex của JavaScript và preg_match của PHP đều dựa trên Perl, vì vậy không nên có bất kỳ vấn đề nào về cổng. Tuy nhiên, lưu ý rằng Javascript chỉ hỗ trợ một tập con của các công cụ sửa đổi mà Perl hỗ trợ.

Để biết thêm thông để so sánh hai:

Đối với phương thức giao hàng, tôi muốn đề nghị bạn muốn sử dụng JSON, định dạng trao đổi dữ liệu mỏng như của ngày (AFAIK) và trực tiếp dịch sang đối tượng JavaScript thông qua eval(). Chỉ cần đặt cậu bé xấu đó thông qua một phiên AJAX và bạn nên được thiết lập để đi.

Tôi hy vọng điều này sẽ giúp :)

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