Javascript 子字符串验证/比较
Posted
技术标签:
【中文标题】Javascript 子字符串验证/比较【英文标题】:Javascript SubString Validation/Comparison 【发布时间】:2014-05-27 05:04:27 【问题描述】:我一直在摆弄这段代码大约一个小时,这让我难以置信。我认为解决方案会相当简单,但我似乎无法弄清楚。 反正到这里。我制作了一个 javascript 函数来检查用户输入的字符,以便它只能接受 7 个字符作为有效条目。这部分工作正常。不起作用的是下一部分,然后检查前三个字符以查看它们是否与一年中的月份匹配,如果不匹配则不通过。到目前为止,即使输入的字符是 jan2345 或 feb3939 等等,它也永远不会返回 true。任何帮助都会很好,这里是有问题的代码。
function validateBirthDate()
var s =document.pizza.birthday.value;
var check=/[A-Za-z]3[0-9]4/;
if(s.length<7 || s.length > 7)
alert("The birth date should have 7 characters!");
return false;
if(s.length==7)
if(check.test(s)==true)
if(s.substring(0,3)!=="jan" || s.substring(0,3)!=="feb" || s.substring(0,3)!=="mar"|| s.substring(0,3)!=="apr" || s.substring(0,3)!=="may" || s.substring(0,3)!=="jun" || s.substring(0,3)!=="jul" || s.substring(0,3)!=="aug" || s.substring(0,3)!=="sep" || s.substring(0,3)!=="oct" || s.substring(0,3)!=="nov" || s.substring(0,3)!=="dec")
alert("The first 3 characters must be a 3 letter abbreviation of one of the 12 months!");
return false;
【问题讨论】:
【参考方案1】:您不应该使用||
,而应该使用&&
。如果s
是"jan"
,它不等于"feb"
,所以alert
会触发。
您还可以执行以下操作:
var months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
if (months.indexOf(s.substring(0,3)) === -1)
alert();
或
if (!/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/i.test(s.substring(0,3)))
alert();
但就其价值而言,这听起来像是一种获取有效日期输入的可怕方式。
具有三个输入,一个代表日,一个代表月,一个代表年,并将可能的输入值限制为有效值。或者更好的是,使用<input>
和type=date
- 尽管这对浏览器的支持有限。某种插件可能是你最好的选择。
【讨论】:
【参考方案2】:逻辑是问题
!(s.substring(0,3)=="jan" || s.substring(0,3)=="feb")
【讨论】:
我以前试过这个,它确实有意义。不过似乎还是不行。以上是关于Javascript 子字符串验证/比较的主要内容,如果未能解决你的问题,请参考以下文章