2016-12-21 12 views
5

Có cách nào dễ dàng để đối diện với regex hay tôi cần xây dựng một regex mới tạo ra điều ngược lại với những gì tôi có?Cách dễ dàng để xóa những gì KHÔNG có trong regex

Ví dụ: tôi sử dụng regex này để đảm bảo tôi nhận được các giá trị tiền tệ phù hợp - không có ký hiệu $.

/^[0-9]+(\.[0-9][0-9]?)?$/ 

Tôi muốn xóa mọi thứ nằm ngoài mẫu này. Ví dụ: nếu người dùng nhập chữ cái hoặc cố gắng nhập hai dấu chấm, ví dụ: 7.50.6, tôi muốn xóa các ký tự không mong muốn. Làm thế nào để làm điều đó?

+1

bạn đang sử dụng regex như thế nào? – Isaac

+0

Tôi hiện đang sử dụng nó để kiểm tra tức là myValue.test (myRegex); Nhưng bây giờ trong ứng dụng React của tôi, tôi muốn ngăn chặn hoàn toàn các giá trị không mong muốn do người dùng nhập vào. – Sam

+0

Có thể thử 'value = value.match (/ [0-9] + (\. [0-9] {1,2})? /) [0]'? Đó có thể là những gì bạn đang theo dõi – Isaac

Trả lời

2

Tôi nghĩ bạn đang thực hiện điều này theo cách sai. Trước hết, cố gắng che giấu lỗi đầu vào theo cách như vậy là một ý tưởng tồi. Nếu người dùng phải nhập một số và họ đặt thêm dấu chấm, điều gì sẽ cho bạn biết đó là phần tốt và điều gì là xấu? Bạn nên nói cho người dùng biết có điều gì đó sai trái với dữ liệu đầu vào của họ.

Nhưng thông thường, bạn sử dụng regex bằng cách chỉ định nó trông như thế nào và các phần quan trọng bạn muốn tiếp tục sử dụng nhóm chụp là gì.

Đây là nhóm chụp: ([a-z0-9])@example.com; đây là nhóm không chụp: (?:hello|hi).

Trong trường hợp số điện thoại, tất cả những vấn đề đó là các chữ số, vì vậy bạn có thể chụp chúng và chấp nhận nhiều hình thức giữa các ký tự. Dưới đây là mã đơn giản cho mã bưu chính:

([A-Z][0-9][A-Z]) ?([0-9][A-Z][0-9]) 

Sau đó, tất cả những gì bạn phải làm là kết hợp các nhóm đã chụp. Nếu có, không gian sẽ không bị bắt.

Tìm thêm ví dụ về MDN.

+0

Mặc dù đề xuất của bạn, nó vẫn không trả lời làm thế nào để có khả năng đảo ngược một regex – Isaac

+0

Tôi KHÔNG cố che giấu bất cứ điều gì. Tôi đang loại bỏ chúng. Ví dụ, điểm cho phép người dùng nhập chữ cái vào một số điện thoại sau đó yêu cầu anh ta sửa chữa nó. Bởi vì React là tất cả về quản lý nhà nước, tôi có thể phát hiện ra rằng người dùng đã nhập các chữ cái và chỉ đơn giản là KHÔNG đặt chúng trong trạng thái của tôi. Bằng cách này, tôi có thể có một trường đầu vào được quản lý chặt chẽ. – Sam

+0

Thật vậy, nó không trả lời cách đảo ngược một regex. Tôi rất nghi ngờ đó là một cái gì đó đáng thử - Tôi thấy điều này như là [Vấn đề XY] (http://xyproblem.info/). –

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