javascript - পিএইচপি




কিভাবে আমি একটি স্ট্রিং জাভাস্ক্রিপ্ট মধ্যে বুলিয়ান রূপান্তর করতে পারেন? (20)

আমি কি জাভাস্ক্রিপ্টের একটি অভ্যন্তরীণ প্রকারে একটি বুলিয়ান মান (উদাহরণস্বরূপ, 'সত্য', 'মিথ্যা') উপস্থাপন করে এমন স্ট্রিংটি রূপান্তর করতে পারি?

আমার HTML এ লুকানো ফর্ম রয়েছে যা একটি তালিকাতে ব্যবহারকারীর নির্বাচন অনুসারে আপডেট করা হয়। এই ফর্মটিতে কিছু ক্ষেত্র রয়েছে যা বুলিয়ান মানগুলি উপস্থাপন করে এবং গতিশীলভাবে বুলিয়ান মানের সাথে ডায়নামিকভাবে জনবহুল। তবে, একবার এই মান লুকানো ইনপুট ক্ষেত্রের মধ্যে স্থাপন করা হলে এটি একটি স্ট্রিং হয়ে যায়।

ক্ষেত্রের বুলিয়ান মান নির্ধারণ করার একমাত্র উপায়, এটি একবার একটি স্ট্রিং রূপান্তরিত হওয়ার পরে, তার স্ট্রিং উপস্থাপনাটির আক্ষরিক মানের উপর নির্ভর করে।

var myValue = document.myForm.IS_TRUE.value;
var isTrueSet = myValue == 'true';

এই সম্পন্ন করার একটি ভাল উপায় আছে কি?


না:

var isTrueSet = (myValue == 'true');

পরিচয় অপারেটর ( === ) ব্যবহার করে আপনি এটি কঠোর করতে পারেন, যা কোনও অন্তর্নির্মিত ধরন রূপান্তর করে না যখন তুলনামূলক ভেরিয়েবলগুলির সমানতা অপারেটর ( == ) পরিবর্তে বিভিন্ন ধরণের থাকে।

var isTrueSet = (myValue === 'true');

না:

আপনার নির্দিষ্ট চাহিদার জন্য আপনি এই দুটি পদ্ধতিগুলি ব্যবহার সম্পর্কে সতর্ক হবেন :

var myBool = Boolean("false");  // == true

var myBool = !!"false";  // == true

কোন স্ট্রিং যা খালি স্ট্রিং নয় তা ব্যবহার করে true মূল্যায়ন করবে। যদিও তারা সবচেয়ে পরিষ্কার পদ্ধতি তবে আমি বুলিয়ান রূপান্তর সম্পর্কিত বিষয়ে ভাবতে পারি, মনে হয় তারা যা খুঁজছেন তা নয়।


সতর্কতা

এই অত্যন্ত উর্ধ্বগামী উত্তরাধিকার উত্তর টেকনিক্যালি সঠিক তবে শুধুমাত্র একটি খুব নির্দিষ্ট দৃশ্যকে কভার করে, যখন আপনার স্ট্রিং মানটি "true" বা "false" (ছোট হাতের অক্ষরও হতে হবে)।

একটি অবৈধ জসন স্ট্রিং নীচের এই ফাংশন মধ্যে পাস একটি ব্যতিক্রম নিক্ষেপ করা হবে

মূল উত্তর:

কেমন?

JSON.parse("true");

অথবা jQuery দিয়ে

$.parseJSON("true");

JSON পার্স সঙ্গে সার্বজনীন সমাধান:

function getBool(val) {
    return !!JSON.parse(String(val).toLowerCase());
}

getBool("1"); //true
getBool("0"); //false
getBool("true"); //true
getBool("false"); //false
getBool("TRUE"); //true
getBool("FALSE"); //false

আপডেট (JSON ছাড়া):

function getBool(val){ 
    var num = +val;
    return !isNaN(num) ? !!num : !!String(val).toLowerCase().replace(!!0,'');
}

আমি এটি পরীক্ষা করতে fiddle তৈরি করেছেন http://jsfiddle.net/remunda/2GRhG/


অনেক উত্তর আছে এবং এটি বেছে নেওয়া কঠিন। আমার ক্ষেত্রে, আমি নির্বাচন করার সময় কর্মক্ষমতা অগ্রাধিকার, তাই আমি এই JSPerf তৈরি যে আমি আশা করি এখানে কিছু হালকা নিক্ষেপ করতে পারেন।

ফলাফল সংক্ষিপ্ত বিবরণ (উচ্চতর ভাল):

  1. শর্তাধীন বিবৃতি : 2,826,922
  2. বোলে বস্তুর উপর সুইচ কেস : 2,825,469
  3. JSON কাস্টিং : 1,867,774
  4. !! রূপান্তর : 805,322
  5. স্ট্রিং প্রোটোটাইপ : 713,637

তারা সম্পর্কিত উত্তর লিঙ্ক যেখানে আপনি প্রতিটি সম্পর্কে আরও তথ্য (পেশাদার এবং বিপর্যয়) খুঁজে পেতে পারেন; বিশেষ করে মন্তব্য।


আপনার সমাধান জরিমানা।

=== ব্যবহার করে শুধুমাত্র এই ক্ষেত্রে মূর্খ হবে, কারণ ক্ষেত্রের value সবসময় একটি String


আপনি নিয়মিত এক্সপ্রেশন ব্যবহার করতে পারেন:

/*
 * Converts a string to a bool.
 *
 * This conversion will:
 *
 *  - match 'true', 'on', or '1' as true.
 *  - ignore all white-space padding
 *  - ignore capitalization (case).
 *
 * '  tRue  ','ON', and '1   ' will all evaluate as true.
 *
 */
function strToBool(s)
{
    // will match one and only one of the string 'true','1', or 'on' rerardless
    // of capitalization and regardless off surrounding white-space.
    //
    regex=/^\s*(true|1|on)\s*$/i

    return regex.test(s);
}

আপনি যদি স্ট্রিং ক্লাসটি প্রসারিত করতে চান তবে আপনি করতে পারেন:

String.prototype.bool = function() {
    return strToBool(this);
};

alert("true".bool());

তাদের জন্য (মন্তব্যগুলি দেখুন) এটি পেতে স্ট্রিং বস্তুটি প্রসারিত করতে চান তবে সংখ্যার বিষয়ে চিন্তিত এবং স্ট্রিং অবজেক্ট প্রসারিত করে এমন অন্যান্য কোডের সাথে সংঘর্ষ সম্পর্কে চিন্তিত:

Object.defineProperty(String.prototype, "com_example_bool", {
    get : function() {
        return (/^(true|1)$/i).test(this);
    }
});
alert("true".com_example_bool);

(অবশ্যই পুরোনো ব্রাউজারগুলিতে কাজ করবে না এবং ফায়ারফক্স মিথ্যা দেখায় যখন অপেরা, ক্রোম, সাফারি এবং IE সত্য দেখায়। 720760 বাগ )


আমার এই প্রশ্নটি হ'ল এটি তিনটি উদ্দেশ্য পূরণ করার লক্ষ্য রাখে:

  • সততা এবং মিথ্যা মূল্যের জন্য মিথ্যা / সত্য ফিরিয়ে আনুন, কিন্তু একাধিক স্ট্রিং মানের জন্য সত্য / মিথ্যাও ফেরত পাঠান যা সত্যিকারের বা মিথ্যা বলে যদি তারা স্ট্রিংগুলির পরিবর্তে বুলিয়ানস হয়।
  • দ্বিতীয়, একটি স্থিতিস্থাপক ইন্টারফেস সরবরাহ করুন যাতে উল্লিখিত অন্যগুলির তুলনায় মানগুলি ব্যর্থ হয় না, বরং একটি ডিফল্ট মান প্রদান করে
  • তৃতীয়, যতটা সম্ভব সামান্য কোড সহ এই সব।

JSON ব্যবহার করে সমস্যাটি জাভাস্ক্রিপ্ট ত্রুটির কারণে ব্যর্থ হয়। এই সমাধান স্থিতিশীল নয় (যদিও এটি 1 এবং 3 সন্তুষ্ট):

JSON.parse("FALSE") // fails

এই সমাধান যথেষ্ট সংক্ষিপ্ত নয়:

if(value === "TRUE" || value === "yes" || ...) { return true; }

আমি Typecast.js এর জন্য এই সঠিক সমস্যা সমাধানে কাজ করছি। এবং সব তিনটি উদ্দেশ্য সবচেয়ে ভাল সমাধান এই এক:

return /^true$/i.test(v);

এটি অনেক ক্ষেত্রে কাজ করে, যখন {} পাস করা মানগুলি, এবং খুব সংক্ষিপ্ত হয় তখন ব্যর্থ হয় না। এছাড়াও এটি অনির্ধারিত বা একটি ত্রুটি নিক্ষেপের পরিবর্তে ডিফল্ট মান হিসাবে মিথ্যা ফিরিয়ে দেয়, যা হ্রাসযুক্ত টাইপ করা জাভাস্ক্রিপ্ট ডেভেলপমেন্টে আরও বেশি কার্যকর। ব্রাভো অন্য প্রশ্নের উত্তর দিয়েছিলেন!


আমি এই এক ব্যবহার করছি

String.prototype.maybeBool = function(){

    if ( ["yes", "true", "1", "on"].indexOf( this.toLowerCase() ) !== -1 ) return true;
    if ( ["no", "false", "0", "off"].indexOf( this.toLowerCase() ) !== -1 ) return false;

    return this;

}

"on".maybeBool(); //returns true;
"off".maybeBool(); //returns false;
"I like js".maybeBool(); //returns "I like js"

আমি এটা অনেক সার্বজনীন মনে হয়:

if (String(a) == "true") ...

এটা যায়:

String(true) == "true"     //returns true
String(false) == "true"    //returns false
String("true") == "true"   //returns true
String("false") == "true"  //returns false

আমি নিম্নলিখিত ব্যবহার করুন:

function parseBool(b) {
    return !(/^(false|0)$/i).test(b) && !!b;
}

এই ফাংশনটি "মিথ্যা" (কেস অসংবেদক) এবং "0" স্ট্রিংগুলির ব্যতিক্রম সহ স্বাভাবিক বুলিয়ান জোর করে সঞ্চালন করে।


আরেকটি সমাধান। jsFiddle

var toBoolean = function(value) {
    var strValue = String(value).toLowerCase();
    strValue = ((!isNaN(strValue) && strValue !== '0') &&
        strValue !== '' &&
        strValue !== 'null' &&
        strValue !== 'undefined') ? '1' : strValue;
    return strValue === 'true' || strValue === '1' ? true : false
};

পরীক্ষা ক্ষেত্রে নোড চালানো

> toBoolean(true)
true
> toBoolean(false)
false
> toBoolean(undefined)
false
> toBoolean(null)
false
> toBoolean('true')
true
> toBoolean('True')
true
> toBoolean('False')
false
> toBoolean('false')
false
> toBoolean('0')
false
> toBoolean('1')
true
> toBoolean('100')
true
> 

ইতিমধ্যে পাওয়া অনেক উত্তর আছে। কিন্তু নিম্নলিখিত কিছু পরিস্থিতিতে দরকারী হতে পারে।

// One can specify all values against which you consider truthy
var TRUTHY_VALUES = [true, 'true', 1];

function getBoolean(a) {
    return TRUTHY_VALUES.some(function(t) {
        return t === a;
    });
}

অ-বুলিয়ান মানগুলির সাথে একটি উদাহরণ যেখানে এটি কার্যকর হতে পারে।

getBoolean('aa'); // false
getBoolean(false); //false
getBoolean('false'); //false

getBoolean('true'); // true
getBoolean(true); // true
getBoolean(1); // true

এই ফাংশন স্ট্রিং পাশাপাশি বুলিয়ান সত্য / মিথ্যা পরিচালনা করতে পারে।

function stringToBoolean(val){
    var a = {
        'true':true,
        'false':false
    };
    return a[val];
}

নিচে বিক্ষোভ:

function stringToBoolean(val) {
  var a = {
    'true': true,
    'false': false
  };
  return a[val];
}

console.log(stringToBoolean("true"));

console.log(typeof(stringToBoolean("true")));

console.log(stringToBoolean("false"));

console.log(typeof(stringToBoolean("false")));

console.log(stringToBoolean(true));

console.log(typeof(stringToBoolean(true)));

console.log(stringToBoolean(false));

console.log(typeof(stringToBoolean(false)));

console.log("=============================================");
// what if value was undefined? 
console.log("undefined result:  " + stringToBoolean(undefined));
console.log("type of undefined result:  " + typeof(stringToBoolean(undefined)));
console.log("=============================================");
// what if value was an unrelated string?
console.log("unrelated string result:  " + stringToBoolean("hello world"));
console.log("type of unrelated string result:  " + typeof(stringToBoolean(undefined)));


এটি গ্রহণযোগ্য উত্তর থেকে নেওয়া হয়েছে, কিন্তু প্রকৃতপক্ষে এটি একটি খুব দুর্বল বিন্দু রয়েছে এবং আমি অবাক হয়েছি যে এটি কিভাবে আপভোটের গণনা পেয়েছে, সমস্যাটির সাথে আপনাকে স্ট্রিংয়ের ক্ষেত্রে বিবেচনা করতে হবে কারণ এটি কেস সংবেদনশীল

var isTrueSet = (myValue.toLowerCase() === 'true');

কেন আপনি এই মত কিছু চেষ্টা করবেন না

Boolean(JSON.parse((yourString.toString()).toLowerCase()));

মামলাটি নির্বিশেষে সত্য বা মিথ্যা ব্যতীত অন্য কোন পাঠ্য দেওয়া হলে এটি একটি ত্রুটি ফিরিয়ে দেবে এবং এটি সংখ্যাকে ক্যাপচার করবে

// 0-> false
// any other number -> true

বুলিয়ান বস্তুর একটি 'পার্স' পদ্ধতি নেই। Boolean('false') সত্য ফিরে, তাই কাজ করবে না। !!'false' এছাড়াও true ফিরে, তাই কাজ করবে না।

যদি আপনি বুলিয়ান true এবং স্ট্রিং 'false' স্ট্রিং 'true' চান তাহলে বুলিয়ান মিথ্যাটি ফিরিয়ে আনতে হলে সহজ সমাধান হল eval() ব্যবহার করা। eval('true') সত্য এবং eval('false') ফেরত মিথ্যা ফেরত। eval() যদিও ব্যবহার করার সময় কর্মক্ষমতা প্রভাব মনে রাখুন।


সবচেয়ে সহজ উপায়টি হ্যান্ডস করে (আপনার স্ট্রিংটি 'সত্য' বা 'মিথ্যা' বলে মনে হয়) হল:

var z = 'true';
var y = 'false';
var b = (z === 'true'); // will evaluate to true
var c = (y === 'true'); // will evaluate to false

এই ধরণের রূপান্তরগুলির জন্য সর্বদা == অপারেটরের পরিবর্তে === অপারেটরটি ব্যবহার করুন!


আমি পিএইচপি ফিল্টার_ভার সাথে মেলে এমন একটি ফাংশন লিখেছিলাম যা এই সুন্দরভাবে করে। একটি জগতে পাওয়া যায়: https://gist.github.com/CMCDragonkai/7389368

/**
 * Parses mixed type values into booleans. This is the same function as filter_var in PHP using boolean validation
 * @param  {Mixed}        value 
 * @param  {Boolean}      nullOnFailure = false
 * @return {Boolean|Null}
 */
var parseBooleanStyle = function(value, nullOnFailure = false){
    switch(value){
        case true:
        case 'true':
        case 1:
        case '1':
        case 'on':
        case 'yes':
            value = true;
            break;
        case false:
        case 'false':
        case 0:
        case '0':
        case 'off':
        case 'no':
            value = false;
            break;
        default:
            if(nullOnFailure){
                value = null;
            }else{
                value = false;
            }
            break;
    }
    return value;
};

var falsy = /^(?:f(?:alse)?|no?|0+)$/i;
Boolean.parse = function(val) { 
    return !falsy.test(val) && !!val;
};

এটি 'false' , 'f' , 'no' , 'n' , এবং '0' (কেস-অসংবেদক) ব্যতীত প্রতিটি false মূল্যের জন্য false এবং প্রতি সত্যের মানের জন্য 'false'

// False
Boolean.parse(false);
Boolean.parse('false');
Boolean.parse('False');
Boolean.parse('FALSE');
Boolean.parse('f');
Boolean.parse('F');
Boolean.parse('no');
Boolean.parse('No');
Boolean.parse('NO');
Boolean.parse('n');
Boolean.parse('N');
Boolean.parse('0');
Boolean.parse('');
Boolean.parse(0);
Boolean.parse(null);
Boolean.parse(undefined);
Boolean.parse(NaN);
Boolean.parse();

//True
Boolean.parse(true);
Boolean.parse('true');
Boolean.parse('True');
Boolean.parse('t');
Boolean.parse('yes');
Boolean.parse('YES');
Boolean.parse('y');
Boolean.parse('1');
Boolean.parse('foo');
Boolean.parse({});
Boolean.parse(1);
Boolean.parse(-1);
Boolean.parse(new Date());

stringToBoolean: function(string){
    switch(string.toLowerCase().trim()){
        case "true": case "yes": case "1": return true;
        case "false": case "no": case "0": case null: return false;
        default: return Boolean(string);
    }
}





javascript