Câu trả lời:
Thay thế [^a-zA-Z0-9 -]
bằng một chuỗi trống.
Regex rgx = new Regex("[^a-zA-Z0-9 -]");
str = rgx.Replace(str, "");
replaceAll
chức năng thay vì replace
.
return Regex.Replace(str, "[^a-zA-Z0-9_.]+", "", RegexOptions.Compiled);
Câu hỏi cơ bản tương tự
""
& string.Empty
hoàn toàn giống nhau. stackoverflow.com/questions/151472/ Mạnh
Tôi có thể đã sử dụng RegEx, họ có thể cung cấp giải pháp tao nhã nhưng chúng có thể gây ra các vấn đề về hiệu suất. Đây là một giải pháp
char[] arr = str.ToCharArray();
arr = Array.FindAll<char>(arr, (c => (char.IsLetterOrDigit(c)
|| char.IsWhiteSpace(c)
|| c == '-')));
str = new string(arr);
Khi sử dụng khung nhỏ gọn (không có FindAll)
Thay thế FindAll bằng 1
char[] arr = str.Where(c => (char.IsLetterOrDigit(c) ||
char.IsWhiteSpace(c) ||
c == '-')).ToArray();
str = new string(arr);
char[] arr = str.Where(c => (char.IsLetterOrDigit(c) || char.IsWhiteSpace(c) || c == '-')).ToArray();
Bạn co thể thử:
string s1 = Regex.Replace(s, "[^A-Za-z0-9 -]", "");
Trong trường hợp s
là chuỗi của bạn.
Sử dụng System.Linq
string withOutSpecialCharacters = new string(stringWithSpecialCharacters.Where(c =>char.IsLetterOrDigit(c) || char.IsWhiteSpace(c) || c == '-').ToArray());
Regex là [^\w\s\-]*
:
\s
tốt hơn là sử dụng thay vì dấu cách ( ), vì có thể có một tab trong văn bản.
Dựa trên câu trả lời cho câu hỏi này, tôi đã tạo một lớp tĩnh và thêm chúng. Nghĩ rằng nó có thể hữu ích cho một số người.
public static class RegexConvert
{
public static string ToAlphaNumericOnly(this string input)
{
Regex rgx = new Regex("[^a-zA-Z0-9]");
return rgx.Replace(input, "");
}
public static string ToAlphaOnly(this string input)
{
Regex rgx = new Regex("[^a-zA-Z]");
return rgx.Replace(input, "");
}
public static string ToNumericOnly(this string input)
{
Regex rgx = new Regex("[^0-9]");
return rgx.Replace(input, "");
}
}
Sau đó, các phương thức có thể được sử dụng như:
string example = "asdf1234!@#$";
string alphanumeric = example.ToAlphaNumericOnly();
string alpha = example.ToAlphaOnly();
string numeric = example.ToNumericOnly();
Muốn một cái gì đó nhanh chóng?
public static class StringExtensions
{
public static string ToAlphaNumeric(this string self, params char[] allowedCharacters)
{
return new string(Array.FindAll(self.ToCharArray(), c => char.IsLetterOrDigit(c) || allowedCharacters.Contains(c)));
}
}
Điều này sẽ cho phép bạn chỉ định những ký tự bạn muốn cho phép là tốt.
Đây là một giải pháp nhanh chóng thân thiện với phân bổ heap không phải là regex mà tôi đang tìm kiếm.
Phiên bản không an toàn.
public static unsafe void ToAlphaNumeric(ref string input)
{
fixed (char* p = input)
{
int offset = 0;
for (int i = 0; i < input.Length; i++)
{
if (char.IsLetterOrDigit(p[i]))
{
p[offset] = input[i];
offset++;
}
}
((int*)p)[-1] = offset; // Changes the length of the string
p[offset] = '\0';
}
}
Và đối với những người không muốn sử dụng không an toàn hoặc không tin tưởng vào độ dài chuỗi.
public static string ToAlphaNumeric(string input)
{
int j = 0;
char[] newCharArr = new char[input.Length];
for (int i = 0; i < input.Length; i++)
{
if (char.IsLetterOrDigit(input[i]))
{
newCharArr[j] = input[i];
j++;
}
}
Array.Resize(ref newCharArr, j);
return new string(newCharArr);
}
Tôi đã tạo ra một giải pháp khác, bằng cách loại bỏ Điều khiển ký tự , đó là vấn đề ban đầu của tôi.
Nó là tốt hơn so với việc đưa vào một danh sách tất cả các ký tự "đặc biệt nhưng tốt"
char[] arr = str.Where(c => !char.IsControl(c)).ToArray();
str = new string(arr);
Nó đơn giản hơn, vì vậy tôi nghĩ nó tốt hơn!
Đây là một phương pháp mở rộng sử dụng câu trả lời @ata làm nguồn cảm hứng.
"hello-world123, 456".MakeAlphaNumeric(new char[]{'-'});// yields "hello-world123456"
hoặc nếu bạn yêu cầu thêm các ký tự khác ngoài dấu gạch nối ...
"hello-world123, 456!?".MakeAlphaNumeric(new char[]{'-','!'});// yields "hello-world123456!"
public static class StringExtensions
{
public static string MakeAlphaNumeric(this string input, params char[] exceptions)
{
var charArray = input.ToCharArray();
var alphaNumeric = Array.FindAll<char>(charArray, (c => char.IsLetterOrDigit(c)|| exceptions?.Contains(c) == true));
return new string(alphaNumeric);
}
}
Tôi sử dụng một biến thể của một trong những câu trả lời ở đây. Tôi muốn thay thế khoảng trắng bằng "-" để SEO thân thiện và cũng tạo chữ thường. Cũng không tham khảo system.web từ lớp dịch vụ của tôi.
private string MakeUrlString(string input)
{
var array = input.ToCharArray();
array = Array.FindAll<char>(array, c => char.IsLetterOrDigit(c) || char.IsWhiteSpace(c) || c == '-');
var newString = new string(array).Replace(" ", "-").ToLower();
return newString;
}
Đây là một phiên bản rất ngắn gọn
myString = myString.replace(/[^A-Za-z0-9 -]/g, "");
Có một cách dễ dàng hơn nhiều với Regex.
private string FixString(string str)
{
return string.IsNullOrEmpty(str) ? str : Regex.Replace(str, "[\\D]", "");
}
-
phải ở cuối lớp nhân vật, hoặc thoát bằng dấu gạch chéo ngược, để tránh bị sử dụng cho một phạm vi.