js前端數(shù)據(jù)驗證

var regexEnum = {

intege : "^-?[1-9]\\d*$", // 整數(shù)

intege1 : "^[1-9]\\d*$", // 正整數(shù)

intege2 : "^-[1-9]\\d*$", // 負(fù)整數(shù)

num : "^([+-]?)\\d*\\.?\\d+$", // 數(shù)字

num1 : "^([+]?)\\d*$", // 正數(shù)(正整數(shù) + 0)

num2 : "^-[1-9]\\d*|0$", // 負(fù)數(shù)(負(fù)整數(shù) + 0)

num3 : "^([+]?)\\d*\\.?\\d+$", // 正數(shù)

decmal : "^([+-]?)\\d*\\.\\d+$", // 浮點數(shù)

decmal1 : "^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*$", // 正浮點數(shù)

decmal2 : "^-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*)$", // 負(fù)浮點數(shù)

decmal3 : "^-?([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0)$", // 浮點數(shù)

decmal4 : "^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0$", // 非負(fù)浮點數(shù)(正浮點數(shù) + 0)

decmal5 : "^(-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*))|0?.0+|0$", // 非正浮點數(shù)(負(fù)浮點數(shù) +

// 0)

email : "^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$", // 郵件

color : "^[a-fA-F0-9]{6}$", // 顏色

url : "^http[s]?:\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-./?%&=]*)?$", // url

chinese : "^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$", // 僅中文

ascii : "^[\\x00-\\xFF]+$", // 僅ACSII字符

zipcode : "^\\d{6}$", // 郵編

mobile : "^(13|15|18|14)[0-9]{9}$", // 手機(jī)

ip4 : "^(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)$", // ip地址

notempty : "^\\S+$", // 非空

picture : "(.*)\\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$", // 圖片

jpg : "(.*)\\.(jpg|gif)$", // 圖片

rar : "(.*)\\.(rar|zip|7zip|tgz)$", // 壓縮文件

date : "^\\d{4}(\\-|\\/|\.)\\d{1,2}\\1\\d{1,2}$", // 日期

qq : "^[1-9]*[1-9][0-9]*$", // QQ號碼

tel : "^(([0\\+]\\d{2,3}-)?(0\\d{2,3})-)?(\\d{7,8})(-(\\d{3,}))?$", // 電話號碼的函數(shù)(包括驗證國內(nèi)區(qū)號,國際區(qū)號,分機(jī)號)

username : "^\\w+$", // 用來用戶注冊。匹配由數(shù)字、26個英文字母或者下劃線組成的字符串

letter : "^[A-Za-z]+$", // 字母

letter_u : "^[A-Z]+$", // 大寫字母

letter_l : "^[a-z]+$", // 小寫字母

letter_num : "^\\w+$", // 匹配由數(shù)字析孽、26個英文字母或者下劃線組成的字符串

idcard : "/(^/d{15}$)|(^/d{17}([0-9]|X)$)/", // 身份證

htmlcode : "^[^\\\\'\"<>@#$&]+$", // 禁止輸入html代碼(特殊字符)

uploadFile : "(.*)\\.(jpg|bmp|gif|png|jpeg|tif|pdf|doc|docx|xls|xlsx|ppt|pptx)$", // 圖片

};

/**

* 校驗文件擴(kuò)展名

*

* @param str

* @returns {Boolean}

*/

function checkFile(str) {

if (isEmpty(str)) {

return true;

}

var strRegex = "(.jpg|.JPG|.gif|.GIF|.png|.PNG)$"; // 用于驗證圖片擴(kuò)展名的正則表達(dá)式

var re = new RegExp(strRegex);

if (re.test(str)) {

return (true);

} else {

return (false);

}

}

function checkExcelFile(str) {

if (isEmpty(str)) {

return true;

}

var strRegex = "(.xls)$";

var re = new RegExp(strRegex);

if (re.test(str)) {

return (true);

} else {

return (false);

}

}

/**

* 正則校驗

*

* @param format

*? ? ? ? ? ? 格式

* @param val

*? ? ? ? ? ? 值

*/

function checkFormat(format, val) {

if (isEmpty(val)) {

if ("notempty" == format) {

return false;

}

return true;

}

var reg = regexEnum[format];

var r = val.match(reg);

if (r == null)

return false;

return true;

}

function isCardID(sId) {

if (isEmpty(sId)) {

return true;

}

var iSum = 0;

if (!/^\d{17}(\d|x)$/i.test(sId))

return "你輸入的身份證長度或格式錯誤";

sId = sId.replace(/x$/i, "a");

if (aCity[parseInt(sId.substr(0, 2))] == null)

return "你的身份證地區(qū)非法";

sBirthday = sId.substr(6, 4) + "-" + Number(sId.substr(10, 2)) + "-"

+ Number(sId.substr(12, 2));

var d = new Date(sBirthday.replace(/-/g, "/"));

if (sBirthday != (d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d

.getDate()))

return "身份證上的出生日期非法";

for ( var i = 17; i >= 0; i--)

iSum += (Math.pow(2, i) % 11) * parseInt(sId.charAt(17 - i), 11);

if (iSum % 11 != 1)

return "你輸入的身份證號非法";

return true;// aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女")

}

// 短時間,形如 (13:04:06)

function isTime(str) {

if (isEmpty(str)) {

return true;

}

var a = str.match(/^(\d{1,2})(:)?(\d{1,2})\2(\d{1,2})$/);

if (a == null) {

return false;

}

if (a[1] > 24 || a[3] > 60 || a[4] > 60) {

return false;

}

return true;

}

//短時間奠支,形如 (13:04)

function isTimeHM(str) {

if (isEmpty(str)) {

return false;

}

var a = str.match(/^(\d{1,2})(:)?(\d{1,2})$/);

if (a == null) {

alert("hm"+a);

return false;

}

if (a[1] > 24 || a[3] > 60) {

alert("hm"+a[1]);

alert("hm"+a[3]);

return false;

}

return true;

}

// 短日期币叹,形如 (2003-12-05)

function isDate(str) {

if (isEmpty(str)) {

return true;

}

var r = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);

if (r == null)

return false;

var d = new Date(r[1], r[3] - 1, r[4]);

return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d

.getDate() == r[4]);

}

// 長時間,形如 (2003-12-05 13:04:06)

function isDateTime(str) {

if (isEmpty(str)) {

return true;

}

var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;

var r = str.match(reg);

if (r == null)

return false;

var d = new Date(r[1], r[3] - 1, r[4], r[5], r[6], r[7]);

return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3]

&& d.getDate() == r[4] && d.getHours() == r[5]

&& d.getMinutes() == r[6] && d.getSeconds() == r[7]);

}

// 空字符串

function isEmpty(str) {

if ((str == null) || (str.toString().replace(/\s+/g, "") == "")) {

return true;

} else {

return false;

}

}

function isNotEmpty(str) {

if ((str == null) || (str.toString().replace(/\s+/g, "") == "")) {

return false;

} else {

return true;

}

}

// 數(shù)字最值(最小值鱼炒,最大值泥彤,必須輸入)

function isNumRange(str, minNum, maxNum) {

if (isEmpty(str)) {

return true;

}

var num = parseFloat(str);

if (!isEmpty(minNum) && num < minNum) {

return false;

} else if (!isEmpty(maxNum) && num > maxNum) {

return false;

} else {

return true;

}

}

// 字符串最大長度

function isMaxLength(str, maxLength) {

if (isEmpty(str)) {

return true;

}

var len = str.length;

if (len > maxLength) {

return false;

} else {

return true;

}

}

// 字符串最小長度

function isMinLength(str, minLength) {

if (isEmpty(str)) {

return true;

}

var len = str.length;

if (len < minLength) {

return false;

} else {

return true;

}

}

// 小數(shù)精確度(maxL:整數(shù)部分長度欲芹,maxF:小數(shù)部分長度)

function isMaxLengthForDouble(str, maxL, maxF) {

if (isEmpty(str)) {

return true;

}

var vals = str.split(".");

if ((vals[0].length > maxL) || (vals[1].length > maxF)) {

return false;

} else {

return true;

}

}

// 字符串固定長度

function isLength(str, length) {

if (isEmpty(str)) {

return true;

}

var len = str.length;

if (len != length) {

return false;

} else {

return true;

}

}

// 失去焦點時do

// obj校驗(jquery)對象,objSpan提示對象, fun執(zhí)行函數(shù)

function onBlurShow(obj, fun) {

obj.blur(fun);

}

// 時間格式轉(zhuǎn)化 date轉(zhuǎn)化成String 方法date.format("時間格式")

Date.prototype.format = function(format) {

var o = {

"M+" : this.getMonth() + 1, // month

"d+" : this.getDate(), // day

"h+" : this.getHours(), // hour

"m+" : this.getMinutes(), // minute

"s+" : this.getSeconds(), // second

"q+" : Math.floor((this.getMonth() + 3) / 3), // quarter

"S" : this.getMilliseconds()

// millisecond

};

if (/(y+)/.test(format))

format = format.replace(RegExp.$1, (this.getFullYear() + "")

.substr(4 - RegExp.$1.length));

for ( var k in o)

if (new RegExp("(" + k + ")").test(format))

format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k]

: ("00" + o[k]).substr(("" + o[k]).length));

return format;

};

// 最小日期

function isMinDate(date, minDate) {

if (isEmpty(date)) {

return true;

}

var r1 = date.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);

var d1 = new Date(r1[1], r1[3] - 1, r1[4]);

var d2 = new Date();

d2 = new Date(d2.getFullYear(), d2.getMonth(), d2.getDate());

if (minDate != "now") {

var r2 = minDate.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);

d2 = new Date(r2[1], r2[3] - 1, r2[4]);

}

var t1 = d1.getTime();

var t2 = d2.getTime();

if (t1 < t2) {

return false;

} else {

return true;

}

}

// 最大日期

function isMaxDate(date, maxDate) {

if (isEmpty(date)) {

return true;

}

var r1 = date.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);

var d1 = new Date(r1[1], r1[3] - 1, r1[4]);

var d2 = new Date();

d2 = new Date(d2.getFullYear(), d2.getMonth(), d2.getDate());

if (maxDate != "now") {

var r2 = maxDate.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);

d2 = new Date(r2[1], r2[3] - 1, r2[4]);

}

var t1 = d1.getTime();

var t2 = d2.getTime();

if (t1 > t2) {

return false;

} else {

return true;

}

}

// 字符串截取

function spliceStr(str) {

if (!isEmpty(str)) {

if (str.length > 5) {

str = str.substr(0, 5) + "..";

return str;

}

} else {

return "";

}

}

/**

* 判斷數(shù)組是否有重復(fù)元素

*

* @param elementArray

* @returns {Boolean}

*/

function isDuplicate(elementArray) {

var nary = elementArray.sort();

for ( var i = 0; i < nary.length; i++) {

if (nary[i] == nary[i + 1]) {

return true;

}

}

return false;

}

/**

* 去掉字符串左邊空格

*

* @param str

* @returns

*/

function ltrim(str) {

var pattern = new RegExp("^[\\s]+", "gi");

return str.replace(pattern, "");

}

/**

* 去掉字符串右邊空格

*

* @param str

* @returns

*/

function rtrim(str) {

var pattern = new RegExp("[\\s]+$", "gi");

return str.replace(pattern, "");

}

/**

* 去掉字符串左右空格

*

* @param str

* @returns

*/

function trim(str) {

return rtrim(ltrim(str));

}

// 開始時間 - 結(jié)束時間 yyyy-mm-dd

function check(startTime, endTime) {

if (startTime.length > 0 && endTime.length > 0) {

var startTmp = startTime.split("-");

var endTmp = endTime.split("-");

var sd = new Date(startTmp[0], startTmp[1], startTmp[2]);

var ed = new Date(endTmp[0], endTmp[1], endTmp[2]);

if (sd.getTime() > ed.getTime()) {

return false;

}

}

return true;

}

// 格式 yyyy-MM

function checkTime(startTime, endTime) {

if (startTime.length > 0 && endTime.length > 0) {

startTime = startTime + "/01";

endTime = endTime + "/01";

var startTimeTmp = startTime.replace(/-/g, "/");

var endTimeTmp = endTime.replace(/-/g, "/");

var d1 = new Date(Date.parse(startTimeTmp));

var d2 = new Date(Date.parse(endTimeTmp));

if (d1 > d2) {

return false;

}

}

return true;

}

// 格式 HH:mm:ss

function compareTime(interviewDate, startTime, endTime) {

var startDate = interviewDate + " " + startTime;

var endDate = interviewDate + " " + endTime;

if (startDate.length > 0 && endDate.length > 0) {

var startDateTemp = startDate.split(" ");

var endDateTemp = endDate.split(" ");

var arrStartDate = startDateTemp[0].split("-");

var arrEndDate = endDateTemp[0].split("-");

var arrStartTime = startDateTemp[1].split(":");

var arrEndTime = endDateTemp[1].split(":");

var allStartDate = new Date(arrStartDate[0], arrStartDate[1],arrStartDate[2], arrStartTime[0], arrStartTime[1],arrStartTime[2]);

var allEndDate = new Date(arrEndDate[0], arrEndDate[1], arrEndDate[2],arrEndTime[0], arrEndTime[1], arrEndTime[2]);

if (allStartDate.getTime() >= allEndDate.getTime()) {

return false;

} else {

return true;

}

} else {

alert("時間不能為空");

return false;

}

}

function CurentTime() {

var now = new Date();

var year = now.getFullYear(); // 年

var month = now.getMonth() + 1; // 月

var day = now.getDate(); // 日

var hh = now.getHours(); // 時

var mm = now.getMinutes(); // 分

var clock = year + "-";

if (month < 10)

clock += "0";

clock += month + "-";

if (day < 10)

clock += "0";

clock += day + " ";

if (hh < 10)

clock += "0";

clock += hh + ":";

if (mm < 10)

clock += '0';

clock += mm;

return (clock);

}

function CurentYearMonth() {

var now = new Date();

var year = now.getFullYear(); // 年

var month = now.getMonth() + 1; // 月

var clock = year + "-";

if (month < 10)

clock += "0";

clock += month;

return (clock);

}

// 是否在數(shù)組內(nèi)

function in_array(needle, haystack) {

if (typeof needle == 'string' || typeof needle == 'number') {

for ( var i in haystack) {

if (haystack[i] == needle) {

return true;

}

}

}

return false;

}

/**

* 去掉字符串最后一個逗號

* @param str

* @returns

*/

function delComma(str)

{

if(str.charAt(str.length-1) == ",")

{

str = str.substring(0, str.length-1);

}

return str;

}

/**

* 比較開始時間和結(jié)束時間

* @param currDate

* @param inputDate

* @returns {Boolean}

*/

function judegeDate(currDate,inputDate){

if(currDate.length>0 && inputDate.length>0){

var startTmp=currDate.split("-");

var endTmp=inputDate.split("-");

var sd=new Date(startTmp[0],startTmp[1],startTmp[2]);

var ed=new Date(endTmp[0],endTmp[1],endTmp[2]);

if(sd.getTime() > ed.getTime()){

return false;

}

}

return true;

}

/**

* 日期校驗正則表達(dá)式

* @param str

* @returns {Boolean}

*/

function isdate(str){

var reg = /^((((((0[48])|([13579][26])|([2468][048]))00)|([0-9][0-9]((0[48])|([13579][26])|([2468][048]))))-02-29)|(((000[1-9])|(00[1-9][0-9])|(0[1-9][0-9][0-9])|([1-9][0-9][0-9][0-9]))-((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30))|(((0[1-9])|(1[0-2]))-((0[1-9])|(1[0-9])|(2[0-8]))))))$/i;

if (reg.test(str)) return true;

return false;

}

/**

* 格式化日期

* @param value

* @returns {String}

*/

function formatDate(value){

var d = new Date(value);

var mon = d.getMonth() + 1;

var day = d.getDate();

var hours = d.getHours();

var minute = d.getMinutes();

var second = d.getSeconds();

return d.getFullYear() + "-" + (mon >= 10 ? mon : "0" + mon) + "-" + (day >= 10 ? day : "0" + day) + " " + (hours >= 10 ? hours : "0" + hours) + ":" + (minute >= 10 ? minute : "0" + minute) + ":" + (second >= 10 ? second : "0" + second);

}

function checkSearchDateTimeBox(strBeginId,strEndId){

var beginvalue = $('#' + strBeginId).datetimebox('getValue');

var endvalue? = $('#' + strEndId).datetimebox('getValue');

if (endvalue != '' &&? beginvalue!=''){

return (endvalue >= beginvalue);

}

return true;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末全景,一起剝皮案震驚了整個濱河市耀石,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌爸黄,老刑警劉巖滞伟,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異炕贵,居然都是意外死亡梆奈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門称开,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亩钟,“玉大人,你說我怎么就攤上這事鳖轰∏逅郑” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵蕴侣,是天一觀的道長焰轻。 經(jīng)常有香客問我,道長昆雀,這世上最難降的妖魔是什么辱志? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任蝠筑,我火速辦了婚禮,結(jié)果婚禮上揩懒,老公的妹妹穿的比我還像新娘什乙。我一直安慰自己,他們只是感情好已球,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布臣镣。 她就那樣靜靜地躺著,像睡著了一般智亮。 火紅的嫁衣襯著肌膚如雪退疫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天鸽素,我揣著相機(jī)與錄音,去河邊找鬼亦鳞。 笑死馍忽,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的燕差。 我是一名探鬼主播遭笋,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼徒探!你這毒婦竟也來了瓦呼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤测暗,失蹤者是張志新(化名)和其女友劉穎央串,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碗啄,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡质和,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了稚字。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饲宿。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖胆描,靈堂內(nèi)的尸體忽然破棺而出瘫想,到底是詐尸還是另有隱情,我是刑警寧澤昌讲,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布国夜,位于F島的核電站,受9級特大地震影響剧蚣,放射性物質(zhì)發(fā)生泄漏支竹。R本人自食惡果不足惜旋廷,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望礼搁。 院中可真熱鬧饶碘,春花似錦、人聲如沸馒吴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饮戳。三九已至豪治,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扯罐,已是汗流浹背负拟。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留歹河,地道東北人掩浙。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像秸歧,于是被迫代替她去往敵國和親厨姚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容

  • var regexEnum = { intege : "^-?[1-9]\\d*$", // 整數(shù) intege1...
    nick2046閱讀 308評論 0 2
  • 單例模式 適用場景:可能會在場景中使用到對象键菱,但只有一個實例谬墙,加載時并不主動創(chuàng)建,需要時才創(chuàng)建 最常見的單例模式经备,...
    Obeing閱讀 2,073評論 1 10
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理拭抬,服務(wù)發(fā)現(xiàn),斷路器侵蒙,智...
    卡卡羅2017閱讀 134,659評論 18 139
  • 浮生染六趣玖喘,初道失光環(huán)。 彼岸花明淹蘑志,藉川泛渡船累奈。 路直難行遠(yuǎn),奇石絕頂端. 日腳踏青原急但,裂云撕破天澎媒。
    陽春閱讀 242評論 0 1
  • 微風(fēng)輕輕的吹 搖晃著樹枝 蒼老的樹皮隨風(fēng)落下 紫荊花在風(fēng)中輕舞 多么美 摘下一枝送給你 愿你不忘記 有紫荊花陪伴的...
    綴滿星星的夜空只有我閱讀 329評論 0 2