قم بإزالة "$" قبل تنفيذ البرنامج النصي ASP.Net RangeValidator

StackOverflow https://stackoverflow.com/questions/354313

سؤال

كيف يمكنني فرض تشغيل البرنامج النصي onchange الخاص بالإدخال قبل البرنامج النصي RangeValidator؟

أريد منع فشل التحقق من الصحة عندما يقوم المستخدم بإدخال علامة الدولار أو الفاصلة.

function cleanUp(str) {
    re = /^\$|,/g;
    return str.replace(re, ""); // remove "$" and ","
}

<input type="text" id="salary" runat="server"
onchange="this.value=cleanUp(this.value)" />

<asp:RangeValidator ID="salaryValidator" 
    runat="server" ErrorMessage="Invalid Number"
    ControlToValidate="salary" Type="Double" />

تحديث:
قررت استخدام CustomValidator الذي يتحقق من النطاق ويستخدم عملة RegEx.شكرا مايكل كنيسكيرن.

function IsCurrency(sender, args) {
    var input = args.Value;

    // Check for currency formatting.
    // Expression is from http://regexlib.com/REDetails.aspx?regexp_id=70
    re = /^\$?([0-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)(.[0-9][0-9])?$/;
    isCurrency = input.match(re);

    if (isCurrency) {
        // Convert the string to a number.
        var number = parseFloat(CleanUp(input));
        if (number != NaN) {
            // Check the range.
            var min = 0;
            var max = 1000000;
            if (min <= number && max >= number) {
                // Input is valid.
                args.IsValid = true;
                return;
            }
        }
    }

    // Input is not valid if we reach this point.
    args.IsValid = false;
    return;
}

function CleanUp(number) {
    re = /^\$|,/g;
    return number.replace(re, ""); // remove "$" and ","
}       

<input type="text" id="salary" runat="server" />

<asp:CustomValidator ID="saleryValidator" ControlToValidate="salary" runat="server" 
ErrorMessage="Invalid Number" ClientValidationFunction="IsCurrency" />
هل كانت مفيدة؟

المحلول

هل حاولت استخدام عنصر تحكم CustomerValidator والجمع بين وظائف أساليب تنظيف JS وأسلوب RangeValidator؟

نصائح أخرى

أعتقد أنه يمكنني تحسين ذلك.وهذا يجعل أرقام الفواصل والسنت اختيارية:

^\$?([0-9]{1,3},?([0-9]{3},?)*[0-9]{3}|[0-9]+)(\.[0-9]{0,2})?$

هناك طريقة للقيام بذلك عن طريق تسجيل البرنامج النصي؛ولكن لماذا لا تستخدم أداة التحقق من التعبير العادي للتأكد من صحة الإدخال؟

أيضًا، يتم تنفيذ مدقق النطاق على حدث onBlur js للحقول، وليس عند التغيير.

لاحظت للتو أن لديك ". بالنسبة للنقطة العشرية ، ولكن هذا يعني أن Regex سيقبل أي حرف في هذا المكان.يجب عليك استخدام \. لتلك النقطة العشرية.

/^\$?([0-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)(\.[0-9][0-9])?$/
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top