我很抱歉这个愚蠢的问题。我一直试图这样做几个小时,我真的无法让它工作。所以我有一个循环,循环通过一些数字。
但它没有取第一个值(71990000
)。
如何实现这一目标?
这是我到目前为止所得到的:
var minNr = 0000;
var maxNr = 10000;
var prefix = 7199;
function Nummer(min,max)
{
var regex = /^(\d{2})\1$/;
var guld_nr;
for(guld_nr = minNr; guld_nr < maxNr;)
{
if(regex.test(guld_nr))
{
$(".resultat").append(prefix + "" + guld_nr + "<br>");
}
guld_nr++;
}
}
输出是这样的:
71991010
71991111
71991212
71991313
但我还需要号码:71990000
我怎么能这样做?
答案 0 :(得分:0)
使用字符串:
var minNr = '0000';
它是正则表达式测试的起始值,您需要四个零。如果它是一个数字,那么你只需要一个零用于测试。如果你用前导零填充它会有所帮助。
var minNr = '0000',
maxNr = 10000,
prefix = 7199;
function Nummer(min,max) {
var regex = /^(\d{2})\1$/;
var guld_nr;
for(guld_nr = minNr; guld_nr < maxNr;guld_nr++) {
if(regex.test(guld_nr)) {
document.write(prefix + "" + guld_nr + "<br>");
}
}
}
Nummer(minNr, maxNr);
&#13;
答案 1 :(得分:0)
数字不会自己填零; 0000; // 0
为它做一个自定义的零填充方法,这样你就可以zpad(0, 4); // "0000"
function zpad(x, digits) {
var pad = '0';
x = x.toString();
digits -= x.length;
while (digits > 0) {
if (digits & 1) x = pad + x;
pad += pad;
digits >>>= 1;
}
return x;
}
现在相应地调整Nummer
function Nummer(min, max, prefix) {
var regex = /^(\d{2})\1$/,
i, str;
prefix = prefix || '';
for(i = min; i < max; ++i) {
str = zpad(i, 4);
if(regex.test(str)) console.log(prefix + str);
}
}
并使用
Nummer(minNr, maxNr, '7199');
旁注
Nummer
未构建对象,请考虑使用驼峰答案 2 :(得分:0)
这是因为你的正则表达式拒绝数字0;第一次通过循环时,minNr
的数值为0(将其设置为0000没有帮助;它只是一种说0的奇特方式)。正则表达式期望两个数字后跟相同的模式,但你给它的是字符串'0'。
您可以将minNr
设置为字符串,而不是在第一次传递('0000'
)时,这将解决'0000'的问题,但您将错过'0101','0202 '等等(将转换为字符串'101','202',等等。)
一种解决方案是将您的号码的字符串表示填零。以下函数将采用任意数字并将零填充它以适合给定的宽度:
function zeropad(n, w) {
n = String(n);
while(n.length < w) n = '0' + n;
return n;
}
您可以使用它转换正则表达式minNr
:
regex.test(zeropad(guld_nr, 4))
另请注意,Number
是JavaScript中文字的内置对象包装器(所有基元都有对象包装器:Number
,Boolean
,String
),并且通过创建一个名为Number
的函数,您将阻塞此内置对象,这是不可取的(需要使用它的代码将调用您的函数,这是不兼容的并且具有不同的目的)。
答案 3 :(得分:0)
您可以使用算术进行数字模式检查,并将结果保持为数字:
var minNr = 0; // it does not help to put 4 zeroes here.
var maxNr = 10000;
var prefix = 7199;
function Nummer(min,max) {
for (var guld_nr = min; guld_nr < max; guld_nr++) {
if (Math.floor(guld_nr/100) === guld_nr % 100 ) {
$(".resultat").append((prefix * 10000 + guld_nr) + "<br>");
}
}
}
Nummer(minNr, maxNr);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="resultat"></div>
你的代码的问题是当较低的数字针对正则表达式进行测试时,它们被隐式转换为字符串,并且没有得到前缀的零,因此它们在正则表达式上失败。
无论如何,代码在坚持数字而不是字符串时会更有效率,所以我建议一直使用数字直到在浏览器中输出它们。
这段代码效率更高:
var minNr = 0; // it does not help to put 4 zeroes here.
var maxNr = 10000;
var prefix = 7199;
function Nummer(min,max) {
var test = Math.floor(min/100)*100 + Math.floor(min/100)%100;
var guld_nr = test < min ? test + 101 : test;
for (; guld_nr < max; guld_nr+=101) {
$(".resultat").append((prefix * 10000 + guld_nr) + "<br>");
}
}
Nummer(minNr, maxNr);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="resultat"></div>