不使用修剪检查是否存在空格

我有以下代码检查日期是否有效。 http://jsfiddle.net/uzSU6/36/

如果日期部分,月份部分或年份部分中有空格,则该日期应视为无效。 为此,目前我正在检查trim操作前后的字符串长度。 它工作正常。 但是有没有更好的方法来检查空格? (例如,使用===运算符)

 function isValidDate(s) { var bits = s.split('/'); //Javascript month starts at zero var d = new Date(bits[2], bits[0] - 1, bits[1]); if ( isNaN( Number(bits[2]) ) ) { //Year is not valid number return false; } if ( Number(bits[2]) < 1 ) { //Year should be greater than zero return false; } //If there is unwanted blank space, return false if ( ( bits[2].length != $.trim(bits[2]).length ) || ( bits[1].length != $.trim(bits[1]).length ) || ( bits[0].length != $.trim(bits[0]).length ) ) { return false; } //1. Check whether the year is a Number //2. Check whether the date parts are eqaul to original date components //3. Check whether d is valid return d && ( (d.getMonth() + 1) == bits[0]) && (d.getDate() == Number(bits[1]) ); } 

如果date字符串中有空格,则可以使用indexOf()函数。

 if(s.indexOf(' ') != -1) { //space exists } 

你可以测试任何像这样的空白

  if( /\s/g.test(s) ) 

它会测试任何空格。

您可能需要考虑使用正则表达式来测试字符串的有效性:

 function isValidDate(s) { var re = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/; var mdy = s.match(re); if (!mdy) { return false; // string syntax invalid; } var d = new Date(mdy[3], mdy[1] - 1, mdy[2]); return (d.getFullYear() == mdy[3]) && (d.getMonth() == mdy[1] - 1) && (d.getDate() == mdy[2]); } 

正则表达式一次完成所有这些:

  • 检查是否有三个以斜杠分隔的字段
  • 要求字段为数字
  • 允许日期和月份为1或2位数,但每年需要4位数
  • 确保字符串中没有其他内容合法

见http://jsfiddle.net/alnitak/pk4wU/