জাভাস্ক্রিপ্ট পরিবর্তনশীল নামের জন্য কোন অক্ষর বৈধ?


557

জাভাস্ক্রিপ্ট ভেরিয়েবলের নামকরণের জন্য কোন অক্ষর ব্যবহার করা যেতে পারে?

আমি এখানে কর্মক্ষেত্রে আমার নন-জাভাস্ক্রিপ্ট ব্যবহারকারীদের জন্য একটি ছোট "এক্সটেনশন লাইব্রেরি" তৈরি করতে চাই (যারা ভাষাটিতে আসে তখন সকলেই হতবাক বলে মনে হয়)। আমি jQuery এবং প্রোটোটাইপ উভয় $ডলার সাইন কিভাবে ব্যবহার করতে পছন্দ করি এবং যেহেতু আমি jQuery ব্যবহার করি, তাই আমি ব্যবহার করার জন্য আরও একটি দুর্দান্ত একক-অক্ষর প্রতীক খুঁজছি।

আমি বুঝতে পারি যে আমি কেবল বেশ কয়েকটি চরিত্র পরীক্ষা করতে পেরেছি, তবে আমি শুরু করতে আমার অক্ষরগুলির তালিকাটি সঙ্কুচিত করার আশা করছি (সম্ভবত আরও একটি জনপ্রিয় গ্রন্থাগারের সাথে ভবিষ্যতের সংহতকরণের বিবেচনায়)।


44
কোন। ইউনিকোড চিঠিগুলি গ্রহণযোগ্য। উদাহরণস্বরূপ π চেষ্টা করে দেখুন।
এলোমেলোভাবে

14
যদিও ইউনিকোড অক্ষরগুলি পরিবর্তনশীল নামে গ্রহণযোগ্য, কোডে ইউনিকোড ব্যবহার করা সমস্যাযুক্ত হতে পারে । আমি তাদের পরিবর্তনশীল নামে ব্যবহার না করার পরামর্শ দিচ্ছি যদি আপনি এগুলি বাদ দিয়ে পেতে পারেন।
গ্যারি এস ওয়েভর

এফ # একটি বৈধ পরিবর্তনশীল নাম? আমি একটি ছোট ফাংশনাল জাভাস্ক্রিপ্ট লাইব্রেরি তৈরি করছি এবং আমি এর মডিউল নামের জন্য F # ব্যবহার করতে চাই। একটি সাধারণ ফাংশন কল এর মতো দেখতে পাবেন: F #। পার্টিশিয়াল (এফএন, ... প্রিসেটআর্গস);
জুলস ম্যানসন

@ জুলসম্যানসন না, কারণ পাউন্ড প্রতীকটি অন্যান্য ব্যবহারের জন্য সংরক্ষিত।
এডান লাভলেস

@ জুলিউস ম্যানসন যাইহোক, এফ # নামটি ইতিমধ্যে মাইক্রোসফ্ট। নেট থেকে নেওয়া হয়েছে
লুক দ্য গীক

উত্তর:


986

বৈধ জাভাস্ক্রিপ্ট ভেরিয়েবলের নাম উদ্ধৃত করতে , আমার লেখার আপটি প্রাসঙ্গিক স্পেক বিভাগগুলি সংক্ষিপ্ত করে:

একটি আইডেন্টিফায়ার দিয়ে শুরু করতে হবে $, _অথবা ইউনিকোড বিভাগ কোনো চরিত্র "আপারকেস বর্ণ (লু)" , "ছোট হাতের অক্ষর (ll)" , "Titlecase চিঠি (লে)" , "সংশোধক চিঠি (lm)" , "অন্যান্য অক্ষর ( লো) " , বা " চিঠি নম্বর (এনএল) "

স্ট্রিংয়ের বাকী অংশগুলিতে একই অক্ষর থাকতে পারে, যেকোনও ইউ + 200 সি শূন্য প্রস্থের নন-সংযুক্তিযুক্ত অক্ষর, ইউ + 200 ডি শূন্য প্রস্থের সংযুক্তি অক্ষর এবং ইউনিকোড বিভাগগুলিতে "নন-স্পেসিং চিহ্ন (এমএন)" , "ব্যবধান সংমিশ্রণ চিহ্ন (কিলোগ্রাম) " , " ডেসিমাল সংখ্যার নম্বর (এনডি) " , বা " সংযোগকারীর যতিচিহ্ন (পিসি) "

আমি একটি সরঞ্জামও তৈরি করেছি যা আপনাকে জানিয়ে দেবে যে আপনার প্রবেশের কোনও স্ট্রিং ECMAScript 5.1 এবং ইউনিকোড 6.1 অনুসারে একটি বৈধ জাভাস্ক্রিপ্ট পরিবর্তনশীল নাম:

জাভাস্ক্রিপ্ট পরিবর্তনশীল নাম বৈধকারক ator


পিএস আপনাকে অ্যান্টনি মিলসের উত্তরটি কী ভুল তা সম্পর্কে ধারণা দিতে: আপনি যদি জাভাস্ক্রিপ্টের জন্য কেবলমাত্র একক ASCII- র নিয়মিত অভিব্যক্তিতে এই সমস্ত বিধিগুলির সংক্ষিপ্ত বিবরণ তুলে ধরেন তবে এটি 11,236 অক্ষর দীর্ঘ হবে । এটা এখানে:

// ES5.1 / Unicode 6.1
/^(?!(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$)[$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc][$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc0-9\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e4-\u08fe\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d02\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19b0-\u19c0\u19c8\u19c9\u19d0-\u19d9\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2-\u1cf4\u1dc0-\u1de6\u1dfc-\u1dff\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c4\ua8d0-\ua8d9\ua8e0-\ua8f1\ua900-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f]*$/

31
এটি তৈরি করতে আপনাকে যে পরিমাণ সময় নিতে হয়েছিল তা আমি আপনাকে ক্রেডিট দেব।
রিচার্ড ক্লেটন

18
@ মার্সবারে আমি তার উপরে একটি নিবন্ধ লিখেছি বলেও ঘটেছে: mathiasbynens.be/notes/ javascript-poperties এবং একটি সরঞ্জামও : mothereff.in/js-poperties#12e34 আমার একটি প্রাসঙ্গিক স্ট্যাক ওভারফ্লো উত্তর এখানে ।
ম্যাথিয়াস বাইনেন্স

2
দামিত তাই আমি স্মার্ট পেতে এবং ¢পরিপূরক ব্যবহার করতে পারি না $... ওহ ভাল ...)-:
হিপ্পিট্রেইল

3
এটি সত্য (এবং দুর্দান্ত উত্তর)। তবে এটি সঠিক করে তোলে না: অনুরূপ-দেখতে-দেখতে-সত্য-ভিন্ন বর্ণগুলি ব্যবহার করে কোডটি অবলম্বন করা (অথবা যে অক্ষরগুলি অ-ইউনিকোড পরিবেশ ব্যবহার করতে পারে না) ভুল, ইমো। এটি কোডিংয়ে সহায়তা করবে না এবং এর পরিবর্তে অসংখ্য বাগ তৈরি করতে পারে। একমাত্র ভাল উত্সাহ: এটি লোকেদের (বেদনাদায়ক) সেই সম্ভাবনা সম্পর্কে সচেতন করে তুলবে যে কিছু কোড ইউনিকোড ব্যবহার করে (এবং ইউনিকোড এবং এর বিভিন্ন উপস্থাপনা সম্পর্কে বেদনাদায়ক সচেতন) ... ইউনিকোড সম্পর্কে: joelonsoftware.com/articles/Unicode.html
অলিভিয়ার ডুলাক

4
@ n2liquid-GuilhermeVieira কেবলমাত্র আপনি যদি মনে করেন যে সমস্ত জাভাস্ক্রিপ্ট ইঞ্জিন 100% স্পেক-কমপ্লায়েন্ট, যা সর্বদা ক্ষেত্রে হয় না - নিশ্চিত যে আমি কখন এই গবেষণাটি করিনি। আমি যে ব্লগ পোস্টটির সাথে লিঙ্ক করেছি সেগুলিতে আমি দায়ের এবং প্যাচ করা সমস্ত ব্রাউজার / ইঞ্জিন বাগ উল্লেখ করে।
ম্যাথিয়াস বাইনেস

117

বিভাগে নাম ECMAScript স্পেসিফিকেশন থেকে 7.6 আইডেন্টিফাইয়ার নাম ও শনাক্তকারীগণ , একটি বৈধ শনাক্তকারী হিসেবে সংজ্ঞায়িত করা হয়:

Identifier :: 
    IdentifierName but not ReservedWord

IdentifierName :: 
    IdentifierStart 
    IdentifierName IdentifierPart 

IdentifierStart :: 
    UnicodeLetter 
    $ 
    _ 
    \ UnicodeEscapeSequence 

IdentifierPart :: 
    IdentifierStart 
    UnicodeCombiningMark 
    UnicodeDigit 
    UnicodeConnectorPunctuation 
    \ UnicodeEscapeSequence 

UnicodeLetter 
    any character in the Unicode categories Uppercase letter (Lu)”, Lowercase letter (Ll)”, Titlecase letter (Lt)”, 
    Modifier letter (Lm)”, Other letter (Lo)”, or Letter number (Nl)”. 

UnicodeCombiningMark 
    any character in the Unicode categories Non-spacing mark (Mn)” or Combining spacing mark (Mc)” 

UnicodeDigit 
    any character in the Unicode category Decimal number (Nd)” 

UnicodeConnectorPunctuation 
    any character in the Unicode category Connector punctuation (Pc)” 

UnicodeEscapeSequence 
    see 7.8.4. 

HexDigit :: one of 
    0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F

যা ভেরিয়েবলের নামকরণ এবং গল্ফিংয়ের জন্য প্রচুর সুযোগ তৈরি করে। আসুন কিছু উদাহরণ চেষ্টা করুন।

একটি বৈধ শনাক্তকারী সঙ্গে হয় একটি শুরু করতে পারে UnicodeLetter, $, _, অথবা \ UnicodeEscapeSequence। একটি ইউনিকোড চিঠি এই বিভাগগুলির যে কোনও অক্ষর ( সমস্ত বিভাগ দেখুন ):

  • বড় হাতের অক্ষর (লু)
  • ছোট হাতের অক্ষর (LL)
  • টাইটেলিকেস লেটার (লে।)
  • সংশোধক পত্র (এলএম)
  • অন্যান্য চিঠি (লো)
  • চিঠি নম্বর (এনএল)

এটি একা কিছু পাগল সম্ভাবনার জন্য অ্যাকাউন্টিং - কাজের উদাহরণ । যদি এটি সমস্ত ব্রাউজারে কাজ না করে, তবে এটিকে একটি বাগ বলুন, কারণ এটি করা উচিত।

var  = "something";
var ĦĔĽĻŎ = "hello";
var 〱〱〱〱 = "less than? wtf";
var जावास्क्रिप्ट = "javascript"; // ok that's JavaScript in hindi
var KingGeorge = "Roman numerals, awesome!";

1
আপনি দয়া করে এই রোসটা কোড পৃষ্ঠাতে আপনার উদাহরণ রেখাগুলি অনুলিপি করতে পারেন , যা বর্তমানে একটি জাভাস্ক্রিপ্ট উদাহরণের অভাব রয়েছে?
ওয়াল্টার ট্রস

73

মূলত, রেগুলার এক্সপ্রেশন আকারে: [a-zA-Z_$][0-9a-zA-Z_$]*। অন্য কথায়, প্রথম অক্ষরটি একটি বর্ণ বা _ বা $ হতে পারে এবং অন্যান্য অক্ষরগুলি বর্ণ বা _ বা $ বা সংখ্যা হতে পারে।

দ্রষ্টব্য: অন্য উত্তরগুলি উল্লেখ করেছে যে আপনি জাভাস্ক্রিপ্ট শনাক্তকারীগুলিতে ইউনিকোড অক্ষর ব্যবহার করতে পারেন, আসল প্রশ্নটি ছিল "jQuery এর মতো কোনও এক্সটেনশন লাইব্রেরির জন্য আমি কোন অক্ষর ব্যবহার করব?" এটি এই প্রশ্নের উত্তর is আপনি শনাক্তকারীগুলিতে ইউনিকোড অক্ষর ব্যবহার করতে পারেন, তবে এটি করবেন না। এনকোডিংগুলি সর্বদা স্ক্রুযুক্ত থাকে। আপনার সর্বজনীন পরিচয়কারীদের যেখানে এটি নিরাপদ থাকে 32-126 ASCII রেঞ্জে রাখুন।


71
আমি সম্ভবত এমন কোনও সহ-বিকাশকারীকে হত্যার পরিকল্পনা করবো যিনি তার লেবেলের নামে ইউনিকোড অক্ষর ব্যবহার করেছিলেন used / সবে কৌতুকপূর্ণ বক্তৃতা
এরিক রিপেন

12
রোমকিনস, আমি মনে করি না "ইউনিকোড চরিত্র সনাক্তকারী নামগুলি" "জাভাস্ক্রিপ্ট: দ্য গুড পার্টস" এর মধ্যে অন্তর্ভুক্ত থাকবে এবং এর মতো আমি তাদের অস্তিত্ব উপেক্ষা করতে পছন্দ করি। তবে, আপনার সুবিধার জন্য আমি আমার উত্তরে অস্বীকৃতি যুক্ত করেছি।
অ্যান্টনি মিলস

11
এনকোডিংসমূহের সংক্রান্ত: দয়া করে না আপনার স্ট্রিং লিটারেল মধ্যে, ব্যবহারের নন- ASCII অক্ষর অন্তত। আমাদের সমস্ত বোকা সফটওয়্যারটি মুছে ফেলতে হবে যা এনকোডিংগুলি "সারাক্ষণ খারাপ হয়ে যায়" gets স্রেফ Console.WriteLine("привет")সি # তে টাইপ করতে এবং এটি আসলে কাজ করতে পারে তা কি আনন্দ !
রোমান স্টারকভ

14
দেখুন, টিমউই, বিশেষত যখন আপনি একটি লাইব্রেরি লিখছেন (যেমন রিচার্ড বলেছেন তিনি), আপনার ব্যবহারকারীদের আল্ট-ব্লাহ বাজে বা কপিরাইটে জোর করে চাপিয়ে দেওয়া ভাল নয়। এছাড়াও, আপনার নিজের স্টাফের জন্য, আপনি ব্রাউজার বা প্রক্সি সার্ভার বাগগুলিতে বা যে কোনও কিছুতে চালিত হওয়ার পরে ক্রপ হয়ে যাওয়া ক্রোধগুলি মোকাবেলায় ভাল হতে পারেন, তবে আপনার লাইব্রেরির ব্যবহারকারীদের সেই জিনিসটির সাথে চুক্তি করা দুর্দান্ত নয়। একটি ভাল উত্তরের উত্তরটি কেবল হাতে থাকা প্রশ্নের সাথে মোকাবিলা করার চেয়ে আরও বেশি "আমার কি করা উচিত" answers তাই হ্যাঁ, আমি লোকদের সাহায্য করতে চাই। আমি অহেতুক এবং বিপজ্জনক তথ্য অন্তর্ভুক্ত করব না, যদি না আমি "ওহ, এবং এটি না করে" বলে না।
অ্যান্টনি মিলস

37
@ চালচালক যে কোডটির জন্য আপনি কেবল ব্যবহার করছেন, সম্ভবত এটি দুর্দান্ত, আপনার প্রধান লাইব্রেরির নাম হিসাবে using ব্যবহার করে। (ওহ, আপনি ভাবেন যে এটি 3 ছিল? তাই দুঃখিত, এটি আসলে ইউ + 01 বি 7 লাতিন ক্যাপিটাল লেটার এজ! নাকি এটি ছিল Cy, সিরিলিক ক্যাপিটাল লেটার জে?) আপনি যদি এমন কোনও লাইব্রেরি লিখতে যাচ্ছেন যা অন্য লোকেরা ব্যবহার করতে পারে তবে, সম্ভবত এটি ASCII এ লেগে থাকা ভাল।
অ্যান্থনি মিলস

18

জাভাস্ক্রিপ্ট 1.5 এর আগে: ^[a-zA-Z_$][0-9a-zA-Z_$]*$

ইংরাজীতে: এটি অবশ্যই ডলারের চিহ্ন, আন্ডারস্কোর বা 26 টি অক্ষরের বর্ণমালা, উপরের বা নীচের ক্ষেত্রে অক্ষরের একটি দিয়ে শুরু করতে হবে। পরবর্তী অক্ষরগুলি (যদি থাকে তবে) যে কোনও একটি বা দশমিক অঙ্ক হতে পারে।

জাভাস্ক্রিপ্ট 1.5 এবং পরবর্তী * :^[\p{L}\p{Nl}$_][\p{L}\p{Nl}$\p{Mn}\p{Mc}\p{Nd}\p{Pc}]*$

এটি ইংরেজিতে প্রকাশ করা আরও কঠিন, তবে অক্ষর এবং অঙ্কগুলি যে কোনও ভাষা হতে পারে এমনটি যুক্ত করে এটি পুরানো বাক্য গঠনগুলির সাথে ধারণাগতভাবে সমান similar প্রথম চরিত্রের পরে, অতিরিক্ত আন্ডারস্কোর-জাতীয় অক্ষর (সম্মিলিতভাবে "সংযোগকারীগুলি বলা হয়) এবং অতিরিক্ত অক্ষর সমন্বয়কারী চিহ্নগুলি (" সংশোধক ") এরও অনুমতি রয়েছে allowed (অন্যান্য মুদ্রার প্রতীকগুলি এই বর্ধিত সেটে অন্তর্ভুক্ত নয়))

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

শনাক্তকারীদের অবশ্যই কোনও বর্তমান সংরক্ষিত শব্দ বা এমন একটি শব্দ নয় যা ভবিষ্যতের ব্যবহারের জন্য বিবেচিত হবে।

শনাক্তকারীর দৈর্ঘ্যের কোনও ব্যবহারিক সীমা নেই। (ব্রাউজারগুলি পরিবর্তিত হয়, তবে আপনার কাছে নিরাপদে 1000 টি অক্ষর এবং সম্ভবত এর চেয়ে আরও কয়েকটি বিস্তারের অর্ডার থাকবে))

চরিত্র বিভাগগুলিতে লিঙ্কগুলি:


* এনবি এই পার্ল রেজেক্সটি কেবল সিনট্যাক্সটি বর্ণনা করার উদ্দেশ্যে তৈরি হয়েছে - এটি জাভাস্ক্রিপ্টে কাজ করবে না, যা (এখনও) ইউনিকোড বৈশিষ্ট্যগুলির জন্য সমর্থন অন্তর্ভুক্ত করে না। (কিছু তৃতীয় পক্ষের প্যাকেজ রয়েছে যা এই জাতীয় সমর্থন যুক্ত করার দাবি করে))


আমি এই রেজেক্সটি বাস্তবে কাজ করতে পারি বলে মনে হয় না। "test".match(/^[\p{L}\p{Nl}$_][\p{L}\p{Nl}$\p{Mn}\p{Mc}\p{Nd}\p{Pc}]*$/) === nullযদিও "পরীক্ষা" একটি বৈধ জেএস ভেরিয়েবলের নাম
ডেভিড মারডোক

দুঃখিত, তবে জাভাস্ক্রিপ্ট এই রেজেক্সকে সমর্থন করে না। আমি স্পষ্ট করে একটি নোট যুক্ত করেছি।
ড্যানরটন

5
এটি লক্ষ্য করা উচিত যে আপনার দ্বিতীয় রেজেক্সের কিছু মিথ্যা ইতিবাচক রয়েছে। পরিপূরক ইউনিকোড অক্ষর (উদাঃ U + 2F800 CJK সামঞ্জস্য আইডোগ্রাফ , যা [লো] বিভাগে তালিকাভুক্ত করা হয়েছে) সনাক্তকারী নামগুলিতে অনুমোদিত নয় , কারণ জাভাস্ক্রিপ্ট তাদের দুটি পৃথক সারোগেট অর্ধেক হিসাবে ব্যাখ্যা করে (যেমন \uD87E\uDC00) যা অনুমোদিত ইউনিকোডের কোনওটির সাথে মেলে না বিভাগ। আপনার রেজেক্স তবে এই জাতীয় চরিত্রের অনুমতি দেবে। এছাড়াও, ইউ + 200 সি এবং ইউ + 200 ডি অনুপস্থিত।
ম্যাথিয়াস বাইনেস

1
ES6 আনুষ্ঠানিকরূপে এই উদ্দেশ্যটির জন্য স্পষ্টরূপে বর্ণিত অক্ষর শ্রেণি ব্যবহার করে বৈধ শনাক্তকারীদের সংজ্ঞা দেয় (প্রগতিতে ব্যবহার করুন) - এটি আগে সত্য ছিল কিনা তা নিশ্চিত নন - যার অর্থ আপনি সংরক্ষিত শব্দগুলি বিবেচনায় না নিলে আপনি এই রেজেক্সকে কিছুটা আরও পঠনযোগ্য করতে পারেন - বা কমপক্ষে এটি হ'ল যদি এটি ইউনিকোড পালানোর সিকোয়েন্সগুলি এখন সনাক্তকারীদের ক্ষেত্রেও বৈধ হয়! এটি ES6 টি অনুমান অনুসারে ঠিক: (?: [\ P _S ID_Start} \ $ _] | (u (?: [\ DA-FA-f] {4} | \ {[\ dA-Fa-f ] \})) ([\ পি \ {ID_Continue} $: _ \ u200C \ u200D] | \\ তোমার দর্শন লগ করা (? [\ da-ফা-F] {4} | \ {[\ da-ফা-F] + \})) *
সেমিকোলন

14

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


সংযোগ ত্রুটি এবং 404 এর সবই আমি প্রতিটি প্রাসঙ্গিক ফলাফলের জন্য পেয়েছি ("ইউনিকোড বিভাগ") এর জন্য
গুগল করার সময়

13

জাভাস্ক্রিপ্ট চলক

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

শুরু করুন: [a-z], $, _

উপস্থিত: [a-z], [0-9], $, _

jQuery এর

আপনি _আপনার লাইব্রেরির জন্য এটি ব্যবহার করতে পারেন যাতে এটি jQuery এর পাশাপাশি পাশাপাশি দাঁড়ায়। তবে, এমন একটি কনফিগারেশন রয়েছে যা আপনি সেট করতে পারেন যাতে jQuery ব্যবহার না করে $। এটি পরিবর্তে ব্যবহার করবে jQuery। এটি করার জন্য, কেবল সেট করুন:

jQuery.noConflict();

এই পৃষ্ঠাটি ব্যাখ্যা করে যে এটি কীভাবে করা যায়।


এটি একেবারে সঠিক, তবে আমি অ্যান্টনিকে উত্তর দিয়েছি যারা তোমার আগে .02123413124 মিলি সেকেন্ডের উত্তর দিয়েছিল। দুঃখিত।
রিচার্ড ক্লেটন

8
@ রিচার্ড: না, এটি একেবারে সঠিক নয়। @ ইউভালিক এবং @ অনুরাগের উত্তর দেখুন।
টিম ডাউন

@ এন্ডেজার্ডমাসা কেন ভেরিয়েবল "_নাম" ব্যবহার করবেন? কেন শুধু নাম নেই?
টমাসজ ওয়াজকিজেক

9

গ্রহণযোগ্য উত্তরটি যতদূর আমি দেখতে পাচ্ছি তা প্রচুর বৈধ শনাক্তকারীকে বিযুক্ত করবে । এখানে একটি নিয়মিত প্রকাশ যা আমি একসাথে রেখেছি যা অনুমানগুলি অনুসরণ করা উচিত (শনাক্তকারীদের .6..6 অধ্যায় দেখুন)। এটি রেগেক্সবাডি ব্যবহার করে তৈরি করা হয়েছে এবং আপনি http://s উদাহরণ.geekality.net/js- شناختফায়ারগুলিতে ব্যাখ্যাটির রফতানির সন্ধান করতে পারেন

^[$_\p{L}][$_\p{L}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\u200C\u200D]*+$

তদতিরিক্ত, নামটি নিম্নলিখিত রক্ষিত শব্দের মধ্যে একটি হতে পারে না।

বিরতি, কর, উদাহরণস্বরূপ, টাইপফ, কেস, অন্য, নতুন, বার, ধরা, শেষ অবধি, ফিরে, বাতিল চেষ্টা করুন, শ্রেণি, এনাম, প্রসারিত, সুপার, কনট, এক্সপোর্ট, আমদানি, প্রয়োগ, চলুন, ব্যক্তিগত, প্রকাশ্য, ফলন, ইন্টারফেস, প্যাকেজ, সুরক্ষিত, স্থির, নাল, সত্য, মিথ্যা


এই রেজেক্সটি কোনও বৈধ জেএস রেজেক্স নয়। আমার মনে হয় আপনি বোঝানো: ^[$_\p{L}][$_\p{L}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\u200C\u200D]*$। এখন এমনকি সংশোধন করেও আমি মনে করি না যে এই রেজেেক্সটি আসলে কাজ করবে। "test".match(/^[\p{L}\p{Nl}$_][\p{L}\p{Nl}$\p{Mn}\p{Mc}\p{Nd}\p{Pc}]*$/) === nullযদিও "পরীক্ষা" একটি বৈধ জেএস পরিবর্তনশীল নাম
ডেভিড মারডোক

না, আমি নিশ্চিত যে আমি যা লিখেছি তা বোঝাতে পেরেছি :) প্রশ্নটি, যেমনটি আমি বুঝতে পেরেছি, একটি বৈধ জাভাস্ক্রিপ্ট ফাংশন নাম কী তা জন্য জিজ্ঞাসা করেছিলেন, এটির জন্য কোনও রেজেক্স কীভাবে বিশেষভাবে জাভাস্ক্রিপ্টে থাকবে না। আমি এটি রেগেক্সবাডিতে তৈরি করেছি এবং আমি যে নমুনা পৃষ্ঠায় লিঙ্ক করেছি তার পিএইচপিতে এটি ব্যবহার করছি। দুর্দান্ত কাজ করে, এবং testপাশাপাশি গৃহীত হয়।
Svish

3
@ ডেভিড মুরডোচ আমি একটি 11,335-অক্ষর জাভাস্ক্রিপ্ট-সামঞ্জস্যপূর্ণ নিয়মিত অভিব্যক্তি লিখেছি যা সনাক্তকারীদের (যেমন। পরিবর্তনশীল নাম) যাচাই করতে ব্যবহার করা যেতে পারে। আমার উত্তর দেখুন ।
ম্যাথিয়াস বাইনেস

3
@ সুইভস এটি লক্ষ্য করা উচিত যে আপনার রেজেক্সের কিছু ভ্রান্ত ইতিবাচক রয়েছে। পরিপূরক ইউনিকোড অক্ষর (উদাঃ U + 2F800 CJK সামঞ্জস্য আইডোগ্রাফ , যা [লো] বিভাগে তালিকাভুক্ত করা হয়েছে) সনাক্তকারী নামগুলিতে অনুমোদিত নয় , কারণ জাভাস্ক্রিপ্ট তাদের দুটি পৃথক সারোগেট অর্ধেক হিসাবে ব্যাখ্যা করে (উদাহরণস্বরূপ \uD87E\uDC00) যা অনুমোদিত ইউনিকোডের কোনওটির সাথে মেলে না বিভাগ। আপনার রেজেক্স তবে এই জাতীয় চরিত্রের অনুমতি দেবে।
ম্যাথিয়াস বাইনেস 12

2
ওয়েল @Svish হাঁ, নিজেকে রেঞ্জ আউট লেখা, মত আমি :) মনে রাখবেন যে আপনার Regex এছাড়াও হিসাব নেই দ্বারা , , , এবং প্রান্ত মামলাevalargumentsNaNInfinityundefined
ম্যাথিয়াস বাইনেস

6

জাভাস্ক্রিপ্ট ভেরিয়েবলের অক্ষর, অঙ্ক, ডলার চিহ্ন ($) এবং আন্ডারস্কোর (_) থাকতে পারে। তারা অঙ্ক দিয়ে শুরু করতে পারে না।

সাধারণত লাইব্রেরি ব্যবহার $এবং _ফাংশন শর্টকার্ট আপনি সর্বত্র ব্যবহার করছি না। যদিও নামগুলি অর্থবহ $বা _অর্থপূর্ণ নয়, তারা তাদের সংক্ষিপ্ততার জন্য দরকারী এবং যেহেতু আপনি যেখানেই এই ফাংশনটি ব্যবহার করবেন আপনি আশা করছেন যে তারা কী বোঝায়।

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

উদাহরণস্বরূপ আপনি দারুণ ডেটজেএস গ্রন্থাগার এবং সিনট্যাটিক চিনিতে এটি কোনও চিহ্ন বা স্বল্প-নামযুক্ত ভেরিয়েবলের প্রয়োজন ছাড়াই একবার দেখতে পারেন ।

আপনার কোডটি প্রথমে ব্যবহারিক হতে হবে এবং কেবল এটি সুন্দর করার চেষ্টা করার পরে।


4

যদি নিয়মিত প্রকাশগুলি আবশ্যক না হয় তবে কেবল ব্রাউজারকে ব্যবহারের সিদ্ধান্ত নিতে বলাই ভাল নয় eval?

function isValidVarName( name ) {
    try {
        // Update, previoulsy it was
        // eval('(function() { var ' + name + '; })()');
        Function('var ' + name);
    } catch( e ) {
        return false;
    }
    return true;
}

isValidVarName('my_var');     // true
isValidVarName('1');          // false

6
না, এটা হবে না। xss = alert("I'm in your vars executin mah scrip's");;;;;উদাহরণস্বরূপ একটি বৈধ জাভাস্ক্রিপ্ট পরিবর্তনশীল নাম নয়।
1j01

6
xss;alert("try again");
1j01

1
এক্সএসএস আক্রমণ দুর্বলতা সত্ত্বেও এটি বেশ চালাক ধারণা।
টুথব্রাশ

@ 1j01 প্রতিস্থাপন কেমন nameসঙ্গে (typeof name === "string")? name.replace(/\(|\)/,"") : "_noXSS" )? যদি এটি একটি স্ট্রিং হয় তবে এটি প্রথম বন্ধনী প্রতিস্থাপন করবে (অবশ্যই ভেরিয়েবলগুলিতে অনুমোদিত নয়), তাই আমি মনে করি যে কোনও কিছু সম্পাদন করা প্রায় অসম্ভব হয়ে পড়ে।
রোহিউই

2
ঠিক আছে, তাহলে isValidVarName('aler(t')সত্য হয়ে যায়। এবং isValidVarName('_;;;')সত্য থাকে। তবে আপনি এটি শুরুতে পরীক্ষা করতে পারেন এটির মতো কোনও কিছুর সাথে মিলেছে /[;,\(\)]/তবে আপনি এখনও সম্পাদন করতে পারেন _=location="#!?"তাই আপনি =তালিকায় যুক্ত হন তবে আপনি এখনও কার্যকর করতে পারেন '_\ndelete foo'(যা একটি বৈধ ভেরিয়েবল নাম হিসাবে পরীক্ষায় উত্তীর্ণ হয়) সুতরাং আপনাকে \nগুলি এবং \rগুলি বাদ দিতে হবে এবং সম্ভবত কিছু ইউনিকোড নিউলাইন? তবে `$` কোনও বৈধ সনাক্তকারী নয় তাই আপনাকে সমস্ত সাদা স্থান বাদ দিতে হবে ... এটি হেরে যাওয়া লড়াই battle আমি মনে করি এটি যতদূর আমি নিজের বিরুদ্ধে যেতে পারিif(/[;,\(\)=\s]/.exec(name))return!1
1j01

1

পরিবর্তনশীল নাম তৈরির জন্য এখানে একটি দ্রুত পরামর্শ দেওয়া হল। আপনি যদি ফায়ারফক্সে ব্যবহার করার সময় ভেরিয়েবলটিকে দ্বন্দ্ব না করতে চান তবে এই পরিবর্তনশীল নামটি ইতিমধ্যে ব্রাউজার দ্বারা ব্যবহৃত হওয়ায় " _ কনটেন্ট " পরিবর্তনশীল নামটি ব্যবহার করবেন না । আমি এটি হার্ড উপায়টি খুঁজে পেয়েছি এবং একটি বিশাল জাভাস্ক্রিপ্ট অ্যাপ্লিকেশনটিতে আমি ভেরিয়েবল "_ কনটেন্ট" ব্যবহার করেছিলাম এমন সমস্ত জায়গাগুলি পরিবর্তন করতে হয়েছিল।


আপনি কি কিছু উত্স কোড দিয়ে এটি প্রমাণ করতে পারেন যা ব্যর্থ হয়? এটি ফায়ারফক্সে কিছু করার কথা মনে হচ্ছে না।
টুথব্রাশ

এখানে একটি জেসফিডাল যা সতর্ক করে যে যখন ভেরিয়েবল "_ কনটেন্ট" "অপরিজ্ঞাত" না হয় এবং যখন ফায়ারফক্স দ্বারা "_ কনটেন্ট" সেট করা হয়, তখন এটি "উইন্ডো কন্টেন্ট" এর সমানতে
ড্যানব্রিয়ানওয়াইট

1

আমি আনাস নাকাওয়ার ধারণা নিয়েছি এবং এটি উন্নত করেছি। প্রথমত, ঘোষণাপত্রটি কার্যকরভাবে চালানোর কোনও কারণ নেই। আমরা কোডটি সঠিকভাবে পার্স করে কিনা তা জানতে চাই, কোডটি কাজ করে কিনা। দ্বিতীয়ত, আক্ষরিক বস্তু হ'ল আমাদের উদ্দেশ্যটির জন্য var XXXএটির পক্ষে ভাঙ্গা শক্ত হওয়ার চেয়ে ভাল প্রসঙ্গ ।

    function isValidVarName( name ) {
    try {
        return name.indexOf('}') === -1 && eval('(function() { a = {' + name + ':1}; a.' + name + '; var ' + name + '; }); true');
    } catch( e ) {
        return false;
    }
    return true;
}

// so we can see the test code
var _eval = eval;
window.eval = function(s) {
    console.log(s);
    return _eval(s);
}

console.log(isValidVarName('name'));
console.log(isValidVarName('$name'));
console.log(isValidVarName('not a name'));
console.log(isValidVarName('a:2,b'));
console.log(isValidVarName('"a string"'));

console.log(isValidVarName('xss = alert("I\'m in your vars executin mah scrip\'s");;;;;'));
console.log(isValidVarName('_;;;'));
console.log(isValidVarName('_=location="#!?"'));

console.log(isValidVarName('ᾩ'));
console.log(isValidVarName('ĦĔĽĻŎ'));
console.log(isValidVarName('〱〱〱〱'));
console.log(isValidVarName('जावास्क्रिप्ट'));
console.log(isValidVarName('KingGeorgeⅦ'));
console.log(isValidVarName('}; }); alert("I\'m in your vars executin\' mah scripts"); true; // yeah, super valid'));
console.log(isValidVarName('if'));

1
চেষ্টাও করবেন না। isValidVarName('}; }); alert("I\'m in your vars executin\' mah scripts"); true; // yeah, super valid');
1j01

1
@ 1j01, আঃ, আমি কোড মন্তব্য সম্পর্কে ভুলে গেছি। আমি আশা করছিলাম যে বন্ধনীগুলির ভারসাম্যহীনতা একা কোড চালানো থেকে বিরত রাখতে পারে। জন্য একটি সাধারণ চেক }যে এড়ানো উচিত।
22:59 এ ক্লিওং

isValidVarName("delete") === true
1j01

1

একটি গিচ কর্মক্ষেত্র লিখেছিলেন যা সমস্ত কোডপয়েন্টগুলিতে পুনরাবৃত্তি করে এবং যদি eval('var ' + String.fromCodePoint(#) + ' = 1')কাজ করে তবে চরিত্রটি নির্গত করে।

এটি কেবল চলছে, এবং চলছে, এবং চলছে ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.