2012-03-08 38 views
5

Tôi đang cố gắng lấy giá trị của trường nhập văn bản và sử dụng nó trong một cụm từ thông dụng. Đây là những gì tôi có để phù hợp với sự bắt đầu của một dòng.Thoát biến trong Cụm từ thông dụng

regex = new RegExp('^' + inputValue, 'i') 

Nó hoạt động tốt cho các chuỗi thông thường bắt đầu có ký tự chữ và số, nhưng tôi cũng sử dụng số tiền này cho số tiền đô la. Khi trường nhập bắt đầu bằng '$' (ký hiệu đô la), tôi sẽ nhận được các kết quả khác nhau.

Làm cách nào để thoát khỏi biến ở trên để được xem dưới dạng chuỗi đơn giản? Tôi đã cố gắng này, nhưng không may mắn:

regex = new RegExp('^[' + inputValue + ']', 'i') 
+0

PHP có 'preg_quote ', Tôi không nghĩ rằng JavaScript có một. Hàm PHP thoát '. \ + *? [^] $() {} =! < > | : -', Vì vậy, tôi đoán chỉ 'thay thế 'chúng với các phiên bản thoát của chúng. –

+2

Xem câu trả lời trong câu hỏi này http://stackoverflow.com/questions/3614440/replicate-the-functionality-of-javas-pattern-quote-in-a-javascript-regexp – Danny

+1

[This] (http: // simonwillison.net/2006/Jan/20/escape/#p-6) có lẽ. – pimvdb

Trả lời

3

Có lẽ một trong những triển khai tốt hơn tôi đã nhìn thấy

http://phpjs.org/functions/preg_quote:491

được sao chép dưới đây cho hậu thế

function preg_quote (str, delimiter) { 
    // Quote regular expression characters plus an optional character 
    // 
    // version: 1109.2015 
    // discuss at: http://phpjs.org/functions/preg_quote // + original by: booeyOH 
    // + improved by: Ates Goral (http://magnetiq.com) 
    // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + bugfixed by: Onno Marsman 
    // + improved by: Brett Zamir (http://brett-zamir.me) // *  example 1: preg_quote("$40"); 
    // *  returns 1: '\$40' 
    // *  example 2: preg_quote("*RRRING* Hello?"); 
    // *  returns 2: '\*RRRING\* Hello\?' 
    // *  example 3: preg_quote("\\.+*?[^]$(){}=!<>|:"); // *  returns 3: '\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:' 
    return (str + '').replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\' + (delimiter || '') + '-]', 'g'), '\\$&'); 
} 
1

$ phù hợp với kết thúc của một dòng, vì vậy nếu bạn Giá trị Nhập bắt đầu với $, bạn đang tìm kiếm các trận đấu như ^$9.99, mà rõ ràng sẽ không phù hợp với bất cứ điều gì vì 9,99 thể không đến sau khi kết thúc một dòng.

nếu $ là ký tự duy nhất bạn lo lắng, bạn chỉ có thể chạy inputValue thông qua tìm/thay thế để $ được chuyển đến \$.

0

Bạn không nghĩ đến việc chỉ kiểm tra xem chuỗi có bắt đầu bằng đầu vào của bạn với indexOf không?

làm nó theo cách sau:

var inputValue = "some"; 
if ("some string".indexOf(inputValue.toLowerCase()) == 0) { 
    // test passed 
} 
Các vấn đề liên quan