繁体   English   中英

Javascript/Jquery - 限制用户在字母前输入数字

[英]Javascript/Jquery - restrict user to enter number before a letter

我有一个带有数字和两个字母“y”和“m”的字符串。 我想提取 y 和 m 之前的数字以获得年份值和月份值。 用户可以输入 8y6m 或任何内容。 我想要验证用户应该始终输入第一个数字,然后是 y,然后是数字,然后是 m。 所以这是我到目前为止写的验证 function:

function ValidateAge(text){
  var reg = new RegExp(/^((\d+)(y|m)*)+$/);
  return reg.test(text);
}

如果用户输入 1m6y 或 1y6m,则验证为真。

要做的事情:检查 y 的验证应该在 m 之前,即它应该是数字后跟 y,然后是数字后跟 m

首先,决定如何构造 RegExp object:

  • 使用RegExp构造函数:

     new RegExp("^((\\d+)(y|m)*)+$")
  • 或者使用 RegExp 文字:

     /^((\d+)(y|m)*)+$/

但不要将这两者混为一谈。 这样做不会引发任何错误,反而会产生意想不到的结果。

我建议使用后者,因为在前者中,您必须对任何内容进行双重转义(注意\\d之前)...

其次,如果要为值创建特定顺序,请不要使用带有乘数的组。

此外,倍增的捕获组将仅捕获最后一次迭代。

因此,您的 RegExp 应如下所示:

/^(\d+)y(\d+)m$/

或使月份可省略(可选):

/^(\d+)y(?:(\d+)m)?$/

或者,至少需要一个,使用零长度断言:

/^(?=.*(?:\d+y|\d+m))(?:(\d+)y)?(?:(\d+)m)?$/

以上两者都将捕获年份作为第一,月份作为第二,以备后用。

使用此处提供的解决方案,您可以验证您的年份和月份您之前的问题

然后您可以使用索引检查 y 是否在 m 之前

yIndex = yourString.indexOf("y");
mIndex = yourString.indexOf("m");
if(yIndex<mIndex) return true;
else return false;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM