Các ký tự được phép là từ A đến Z, a đến z, 0 đến 9. Số tiền ít nhất của mã hoặc một hàm đơn lẻ sẽ là tốt nhất vì hệ thống là thời gian quan trọng khi phản hồi lại đầu vào.Cách nhanh nhất để loại bỏ các ký tự không phải chữ và số từ một chuỗi trong Delphi7 là gì?
Trả lời
uses JclStrings;
S := StrKeepChars('mystring', ['A'..'Z', 'a'..'z', '0'..'9']);
Lưu ý: Trong thư viện JCL mới nhất, bạn sẽ nói: 'sử dụng JclAnsiStrings' –
kiện OnKeyPress
bắt đầu nếu không muốn nói (quan trọng trong [ 'A' .. 'Z', 'a' .. 'z', '0' .. '9']) sau đó chính: = # 0; kết thúc;
Bạn phải xác thực văn bản trước khi sử dụng. Bạn có thể bỏ qua kiểm tra này bằng cách sử dụng tính năng kéo và thả tạm thời hoặc kéo thả văn bản. – DiGi
OP muốn xóa một chuỗi - không đề cập đến bàn phím. –
Chỉ để thêm nhận xét.
Giải pháp sử dụng một bộ là tốt trong Delphi 7, nhưng nó có thể gây ra một số vấn đề trong Delphi 2009 vì bộ không thể có char (chúng được chuyển thành ansichar).
Một giải pháp bạn có thể sử dụng là:
case key of
'A'..'Z', 'a'..'z', '0'..'9' : begin end; // No action
else
Key := #0;
end;
Nhưng cách linh hoạt nhất là tất nhiên:
if not ValidChar(key) then
Key := #0;
Trong trường hợp đó bạn có thể sử dụng ValidChar ở nhiều địa điểm và nếu nó cần phải được thay đổi bạn chỉ phải thay đổi nó một lần.
Nếu tôi hiểu bạn một cách chính xác bạn có thể sử dụng một chức năng như thế này:
function StripNonAlphaNumeric(const AValue: string): string;
var
SrcPtr, DestPtr: PChar;
begin
SrcPtr := PChar(AValue);
SetLength(Result, Length(AValue));
DestPtr := PChar(Result);
while SrcPtr <> #0 do begin
if SrcPtr[0] in ['a'..'z', 'A'..'Z', '0'..'9'] then begin
DestPtr[0] := SrcPtr[0];
Inc(DestPtr);
end;
Inc(SrcPtr);
end;
SetLength(Result, DestPtr - PChar(Result));
end;
này sẽ sử dụng PChar cho tốc độ cao nhất (với chi phí ít readibility).
Edit: Re bình luận bằng gabr về việc sử dụng DestPtr [0] thay vì DestPtr^: Điều này cần biên dịch để các byte cùng dù sao, nhưng có những ứng dụng thoải mái trong mã tương tự, khi bạn cần phải nhìn thẳng. Giả sử bạn muốn thay thế dòng mới, sau đó bạn có thể làm một cái gì đó như
function ReplaceNewlines(const AValue: string): string;
var
SrcPtr, DestPtr: PChar;
begin
SrcPtr := PChar(AValue);
SetLength(Result, Length(AValue));
DestPtr := PChar(Result);
while SrcPtr <> #0 do begin
if (SrcPtr[0] = #13) and (SrcPtr[1] = #10) then begin
DestPtr[0] := '\';
DestPtr[1] := 't';
Inc(SrcPtr);
Inc(DestPtr);
end else
DestPtr[0] := SrcPtr[0];
Inc(SrcPtr);
Inc(DestPtr);
end;
SetLength(Result, DestPtr - PChar(Result));
end;
và do đó tôi thường không sử dụng ^.
BTW, không ai có ý tưởng làm thế nào để định dạng này theo cách làm nổi bật hoạt động chính xác?
Tôi thấy việc sử dụng SrcPtr [0] ở đây rất thú vị - chưa bao giờ thấy cách tiếp cận như vậy trước đây. Cách kinh điển hơn sẽ là sử dụng SrcPtr^và DestPtr ^. – gabr
Re: Định dạng - có thể nếu bạn đặt dấu chấm phẩy bị thiếu trong sau "DestPtr [0]: = 't'" đánh dấu sẽ hoạt động. :-) –
Cảm ơn Ken, sửa chữa, nhưng nó vẫn không hoạt động :-(Các highlighter xử lý Delphi dây như C dây không may. – mghie
- 1. Regex để loại bỏ các ký tự không phải chữ và số từ các chuỗi UTF8
- 2. R loại bỏ các ký hiệu không phải là chữ và số từ một chuỗi
- 3. Xóa ký tự không phải số và không phải ký tự khỏi một chuỗi?
- 4. RegEx: Loại bỏ các ký tự không phải chữ cái UTF-8 an toàn, nhanh chóng
- 5. Làm thế nào để loại bỏ tất cả các ký tự không phải chữ và số từ một chuỗi ngoại trừ dấu chấm và dấu cách trong excel?
- 6. cách nhanh chóng để kiểm tra xem một chuỗi ký tự không phải là số
- 7. Xóa tất cả các ký tự không phải chữ cái, không phải chữ số từ một chuỗi?
- 8. Làm thế nào để loại bỏ tất cả các ký tự không phải chữ số và không gian từ một chuỗi trong PHP?
- 9. Xóa các ký tự không phải chữ và số từ một chuỗi
- 10. Tại sao một chữ bát phân không phải là một chuỗi ký tự thành một số?
- 11. Làm cách nào để xóa ký tự không phải là số từ một chuỗi trong java?
- 12. Cách nhanh nhất để kiểm tra các chữ số trùng lặp của một số là gì?
- 13. gian Loại bỏ bất cứ điều gì và đó không phải là chữ và số
- 14. Làm cách nào để xác định xem một Chuỗi có ký tự không phải là chữ và số không?
- 15. Cách nhanh nhất để lặp qua các ký tự riêng lẻ trong một chuỗi trong C# là gì?
- 16. Google sử dụng ký tự không phải chữ và số
- 17. Cách nhanh nhất để xóa các dòng mới khỏi một chuỗi trong C# là gì?
- 18. C++ Cách nhanh nhất để quét các phần tử nhất định trong mảng char chưa ký và một véc tơ chữ ký không dấu là gì?
- 19. Dải ký tự không phải chữ và số từ tiếng Ả Rập UTF8 + Chuỗi tiếng Anh
- 20. cách tốt nhất để loại bỏ n ký tự cuối cùng của chuỗi (trong Ruby) là gì?
- 21. Xóa tất cả các ký tự không phải chữ và số bằng cách sử dụng preg_replace
- 22. Cách kiểm tra xem ký tự trong chuỗi có phải là một chữ cái không? Python
- 23. T-SQL bỏ tất cả các ký tự không phải là alpha và không phải là số
- 24. Làm thế nào để loại bỏ một số ký tự từ chuỗi của tôi
- 25. Cách nhanh nhất để loại bỏ char đầu tiên trong một chuỗi
- 26. Ký tự này là gì (Â) và làm thế nào để loại bỏ nó bằng PHP?
- 27. Tách mọi thứ trừ ký tự chữ và số từ một chuỗi trong PHP
- 28. Loại chuỗi ký tự trong C++ là gì? Ví dụ:
- 29. Cách tốt nhất để nén hoặc mã hóa danh sách các số thành một chuỗi ký tự chữ và số là gì?
- 30. Làm cách nào để tách các ký tự không phải chữ và số (bao gồm khoảng trắng) khỏi chuỗi?
Gắn thẻ tốt ở đó;) – AdrianoKF