c# - معنى - يجب أن يحتوي عنوان ويب فيسبوك الخاص بك على أحرف أبجدية رقمية.




كيف أقوم بإزالة كافة الأحرف غير الأبجدية الرقمية من سلسلة ما عدا الشرطة؟ (8)

كيف يمكنني إزالة جميع الأحرف غير الأبجدية الرقمية من سلسلة ما باستثناء أحرف الشرطة والمسافات؟


أستخدم شكلاً من إجابة واحدة من الإجابات هنا. أريد استبدال المساحات بـ "-" بحيث يكون محرك البحث المخصص التابع لشركة SEO ودائمًا أيضًا. أيضا لا مرجع system.web من طبقة خدماتي.

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;
}

استناداً إلى الإجابة عن هذا السؤال ، قمت بإنشاء فئة ثابتة وإضافة هذه. أعتقد أنه قد يكون مفيدا لبعض الناس.

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, "");
    }
}

ثم يمكن استخدام الطرق على النحو التالي:

string example = "[email protected]#$";
string alphanumeric = example.ToAlphaNumericOnly();
string alpha = example.ToAlphaOnly();
string numeric = example.ToNumericOnly();

تريد شيء سريع؟

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)));
    }
}

سيسمح لك ذلك بتحديد الحروف التي تريد السماح بها أيضًا.


كان بإمكاني استخدام RegEx ، يمكنهم توفير حل أنيق ولكن يمكن أن يسبب مشاكل في الأداء. هنا حل واحد

char[] arr = str.ToCharArray();

arr = Array.FindAll<char>(arr, (c => (char.IsLetterOrDigit(c) 
                                  || char.IsWhiteSpace(c) 
                                  || c == '-')));
str = new string(arr);

عند استخدام الإطار المضغوط (الذي لا يحتوي على FindAll)

استبدل FindAll بـ 1

char[] arr = str.Where(c => (char.IsLetterOrDigit(c) || 
                             char.IsWhiteSpace(c) || 
                             c == '-')).ToArray(); 

str = new string(arr);

1 تعليق من قبل ShawnFeatherly


هنا هو حل سريع ودية غير regex كومة الذاكرة المؤقتة التي كانت ما كنت أبحث عنه.

الطبعة غير الآمنة.

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';
    }
}

وبالنسبة لأولئك الذين لا يريدون استخدام غير آمن أو لا يثقون باختراق طول السلسلة.

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);
}

هناك طريقة أسهل بكثير مع Regex.

private string FixString(string str)
{
    return string.IsNullOrEmpty(str) ? str : Regex.Replace(str, "[\\D]", "");
}

يمكنك المحاولة:

   string s1= Regex.Replace(s,"[^A-Za-z0-9 _]","");

حيث s هو السلسلة الخاصة بك.


استبدل [^a-zA-Z0-9 -] بسلسلة فارغة.

Regex rgx = new Regex("[^a-zA-Z0-9 -]");
str = rgx.Replace(str, "");




regex