我使用以下Javascript来限制我的网站上的文本字段只接受数字输入,而不是其他字母或字符.问题是,它真的拒绝所有其他主要投入物,如ctrl- A选择文本,或者甚至像任何其他浏览器的功能ctrl- T或ctrl- W当选定文本框.有没有人知道一个更好的脚本只允许数字输入,但不能阻止正常命令(没有直接输入到字段中)?谢谢这是我现在使用的代码:
function numbersonly(e, decimal)
{
var key;
var keychar;
if (window.event)
key = window.event.keyCode;
else if (e)
key = e.which;
else
return true;
keychar = String.fromCharCode(key);
if ((key==null) || (key==0) || (key==8) || (key==9) || (key==13) || (key==27))
return true;
else if ((("0123456789").indexOf(keychar) > -1))
return true;
else if (decimal && (keychar == "."))
return true;
else
return false;
}
Run Code Online (Sandbox Code Playgroud)
编辑:提供已经解决了我的允许像命令的问题的解决方案中没有ctrl- A当选定文本框.这就是我在这里提出的要点,所以我又回到了使用我的原始剧本.那好吧.
我知道这个问题肯定已被问过并回答了一百万次,但我找不到一个简单的解决方案.我有一个JTextField,它只接受正整数作为输入.我需要一种方法来确保没有其他任何东西在这里输入.
我已经有一个keyListener附加到此控件.删除此侦听器要处理的其他代码,我有:
txtAnswer.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
/* Restrict input to only integers */
if (key < 96 && key > 105) e.setKeyChar('');
};
});
Run Code Online (Sandbox Code Playgroud)
如您所见,我正在尝试使用KeyCode来检查刚按下的键是否在整数范围内.这似乎有效.但我想要做的就是在条目超出此范围时忽略该条目.该代码e.setKeyChar('')旨在处理此问题,但它不起作用.代码将编译,但它没有明显的效果.
任何人都可以告诉我,我是否走在正确的轨道上?有什么可以替代e.setKeyChar('')它来使这项工作?还是我完全朝错误的方向走?
谢谢.
我有一个分配给变量的数字,如:
var myVar = 1234;
Run Code Online (Sandbox Code Playgroud)
现在我想从该数字得到第二个数字(在这种情况下为2),而不是先将其转换为字符串.那可能吗?
有一个大表,我想添加一个列,每列都有一个随机选择的数字.1,2或3.
很难过.有任何想法吗?
在某些项目中,我需要验证一些数据并尽可能确定它是可以在数学运算中使用的javascript数值.
jQuery和其他一些javascript库已经包含了这样一个函数,通常称为isNumeric.stackoverflow上还有一篇文章被广泛接受为答案,与前面提到的库所使用的一般例程相同.
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
Run Code Online (Sandbox Code Playgroud)
作为我的第一篇文章,我无法在该帖子中回复.我接受的帖子的问题是,似乎有一些角落案例影响了我正在做的一些工作,所以我做了一些改变,试图解决我遇到的问题.
首先,如果参数是长度为1的数组,则上面的代码将返回true,并且该单个元素是上述逻辑认为是数字的类型.在我看来,如果它是一个数组,那么它不是数字.
为了缓解这个问题,我添加了一个检查来从逻辑中对数组进行折扣
function isNumber(n) {
return Object.prototype.toString.call(n) !== '[object Array]' &&!isNaN(parseFloat(n)) && isFinite(n);
}
Run Code Online (Sandbox Code Playgroud)
当然,您也可以使用Array.isArray而不是Object.prototype.toString.call(n) !== '[object Array]'
编辑:我已经更改了代码以反映数组的通用测试,或者您可以使用jquery $.isArray或原型Object.isArray
我的第二个问题是负十六进制整数文字字符串("-0xA" - > -10)没有被计为数字.但是,正十六进制整数文字字符串("0xA" - > 10)被视为数字.我需要两个都是有效的数字.
然后我修改了逻辑以考虑到这一点.
function isNumber(n) {
return Object.prototype.toString.call(n) !== '[object Array]' &&!isNaN(parseFloat(n)) && isFinite(n.toString().replace(/^-/, ''));
}
Run Code Online (Sandbox Code Playgroud)
如果你每次调用函数时都担心正则表达式的创建,那么你可以在一个闭包中重写它,就像这样
isNumber = (function () {
var rx = /^-/;
return function (n) {
return Object.prototype.toString.call(n) !== '[object …Run Code Online (Sandbox Code Playgroud) 好吧,这是一个比它听起来更棘手的问题,所以我转向堆栈溢出,因为我想不出一个好的答案.这就是我想要的:我需要Python以随机顺序生成一个简单的0到1,000,000,000的数字列表,用于序列号(使用随机数,这样你就无法分辨已经分配了多少或做了时间攻击很容易,即猜测下一个会出现的问题).这些数字与链接到它们的信息一起存储在数据库表(索引)中.生成它们的程序不会永远运行,因此它不能依赖于内部状态.
没什么大不了的?只需生成一个数字列表,将它们推入一个数组并使用Python"random.shuffle(big_number_array)",我们就完成了.问题是我想避免必须存储一个数字列表(从而读取文件,弹出一个顶部,保存文件并关闭它).我宁愿在飞行中生成它们.问题是我能想到的解决方案有问题:
1)生成一个随机数,然后检查它是否已被使用.如果已经使用它生成一个新的数字,检查,根据需要重复,直到找到一个未使用的数字.这里的问题是,在获得未使用的数字之前,我可能会感到不幸并生成大量使用过的数字.可能的解决方法:使用一个非常大的数字池来减少这种情况的可能性(但最后我得到了愚蠢的长数字).
2)生成一个随机数,然后检查它是否已被使用.如果已经使用了从数字中添加或减去一个并再次检查,请继续重复,直到我点击未使用的数字.问题是这不再是随机数,因为我已经引入了偏见(最终我会得到一堆数字,你可以预测下一个数字有更大的成功机会).
3)生成一个随机数,然后检查它是否已被使用.如果它已被使用添加或减去另一个随机生成的随机数并再次检查,问题是我们回到简单地生成随机数并检查解决方案1.
4)将其取出并生成随机列表并保存,让守护程序将它们放入队列中,以便有可用的数字(并避免不断打开和关闭文件,而是将其批处理).
5)生成更大的随机数并散列它们(即使用MD5)来获得更小的数值,我们应该很少得到冲突,但最终我的数字大于所需的数字.
6)在随机数(即unix时间戳)之前添加或附加基于时间的信息以减少碰撞的可能性,同样我得到的数字比我需要的数字更多.
任何人都有任何聪明的想法,可以减少"碰撞"的机会(即产生一个已经采取的随机数),但也可以让我保持这个数字"小"(即少于十亿(或十亿)你的欧洲人=)).
答案以及为什么我接受它:
因此,我将简单地选择1,并希望它不是一个问题,但是如果是的话,我会选择生成所有数字并存储它们的确定性解决方案,以便有一个获得新的随机数的保证,我可以使用"小"数字(即9位数而不是MD5 /等).
我想知道是否有一个内置于Python中的函数可以确定两个有理数之间的距离,但我没有告诉它哪个数字更大.例如
>>>distance(6,3)
3
>>>distance(3,6)
3
Run Code Online (Sandbox Code Playgroud)
显然我可以写一个简单的定义来计算哪个更大然后只做一个简单的减法:
def distance(x, y):
if x >= y:
result = x - y
else:
result = y - x
return result
Run Code Online (Sandbox Code Playgroud)
但我宁愿不必调用这样的自定义函数.根据我有限的经验,我经常发现Python有一个内置函数或一个模块,它可以完全按照您的需要执行,并且比代码更快.希望有人能告诉我有一个内置功能可以做到这一点.
JSON号码周围可以有引号吗?在大多数搜索链接中,似乎数字不需要"引号".但是,如果解析器同时接受"attr" : 6和"attr" : "6"?
如果MyParser有一个方法getInt来获取给定密钥的数字,应该在两种情况下都MyParser.getInt("attr")返回6,或者在后一种情况下抛出异常?
从(比方说)a转换usize为a 的惯用方法是u32什么?
例如,铸造用4294967295us as u32作品和类型强制转换锈参考文档说
数值可以转换为任何数字类型.原始指针值可以转换为任何整数类型或原始指针类型.任何其他强制转换都不受支持,无法编译.
但是4294967296us as u32会默默地溢出并给出0的结果.
我发现ToPrimitive和FromPrimitive提供了很好的功能ToPrimitive,但它们目前被标记为不稳定:
FromPrimitive
什么是在数字(和指针)类型之间转换的惯用(和安全)方式?
更新:to_u32() -> Option<u32>/的可变大小#[unstable(feature = "core", reason = "trait is likely to be removed")]是我问这个问题的一个原因 - 原始场景是我想转换isize为usize所以我可以代表一个树u32(例如usize,然后获得节点2的祖父将be Vec<u32>),我想知道如果let t = Vec![0u32, 0u32, 1u32]小于32位会如何失败.