1

谁能帮我写一个正则表达式,我将用它来验证必须符合以下标准的javascript中的字段(代表一个digicode)?

  • 需要有 4 到 6 个数字(0 到 9)
  • 需要在开头或结尾有 1 *(星号)或 1 #(锐角)

所以以下工作:

  • 1234*
  • *12345
  • 56789#
  • #456789

以下不起作用:

  • 1234
  • 1*234
  • *1234*
  • *1234#
  • 1234*#
  • abcde

非常感谢!!

4

4 回答 4

2
^(?:[*#]\d{4,6}|\d{4,6}[*#])$

在 Regexr 上查看

你可能想阅读一些关于正则表达式的基础知识:每个程序员都应该知道的关于正则表达式的知识(我自己的博客文章)我在这里使用的所有内容都在这里介绍。

于 2012-05-24T10:30:16.577 回答
2
var s,
    rg1=/^[*#]\d{4,6}$/,
    rg2=/^\d{4,6}[*#]$/;

s="1234*"; console.info(rg1.test(s)||rg2.test(s));
s="*12345"; console.info(rg1.test(s)||rg2.test(s));
s="56789#"; console.info(rg1.test(s)||rg2.test(s));
s="#456789"; console.info(rg1.test(s)||rg2.test(s));

s="1234"; console.info(rg1.test(s)||rg2.test(s));
s="1*234"; console.info(rg1.test(s)||rg2.test(s));
s="*1234*"; console.info(rg1.test(s)||rg2.test(s));
s="*1234#"; console.info(rg1.test(s)||rg2.test(s));
s="1234*#"; console.info(rg1.test(s)||rg2.test(s));
s="abcde"; console.info(rg1.test(s)||rg2.test(s));
于 2012-05-24T10:33:58.033 回答
1

不知道这是否可以更优化。在 node.js 中测试:

var x = new RegExp(/^[*#]\d{4,6}$|^\d{4,6}[*#]$/);
于 2012-05-24T10:27:50.667 回答
1

这应该适合你;

var expression = /^([*#]?\d{4,6}|\d{4,6}[*#]?)$/;

并且匹配必须至少在 * 或 # 上的地方,即不仅仅是 1234

var expression = /^([*#]\d{4,6}|\d{4,6}[*#])$/;
于 2012-05-24T10:30:39.650 回答