【问题标题】:Show string in input field type=number在输入字段中显示字符串 type=number
【发布时间】:2021-05-30 17:17:45
【问题描述】:

是否可以在type数字的input字段中显示字符串?

我想做这样的事情:

<input value="4'000" placeholder="Type some numbers" type="number" />

它将始终显示占位符,因为 "4'000" 有一个 撇号,因此是一个字符串。

关于如何在数字类型的输入中显示字符串(如果可能没有包 - 我正在使用 React)有什么想法吗?

谢谢!

【问题讨论】:

  • 你能分享它的任何用例吗?有很多问题围绕着它展开。如果你真的需要number 那么为什么 撇号?如果您需要string,那么必须将input 类型作为number,您可以将text 作为输入类型吗?因此,如果您可以分享用例,那么告诉任何事情都会好得多。
  • @not-a-bot 其实只是因为可读性的目的。

标签: javascript html reactjs string input


【解决方案1】:

来自 WDN 网络文档input type="number"

数字类型的输入元素用于让用户输入数字。它们包括用于拒绝非数字条目的内置验证。

所以你不能在数字输入中显示字符串。

但你可以将“4'000”转换为“4000”,并显示为一个数字:

"4'000".replaceAll("'", "") // => "4000"

<input value="4000" placeholder="Type some numbers" type="number">

【讨论】:

  • 好的。谢谢。没见过那个。我已经有一个数字,想对其进行格式化并显示得更漂亮,但如果这不可能,那也没关系。
  • 对于显示有一个解决方法可以通过使用&lt;input type="text"&gt; HTML Input type number Thousand separator
【解决方案2】:

因此,在您在值字段上添加 value 之前,您可以先“处理”它以删除值上的所有非数字内容:

使用这个功能: \D 是匹配所有非数字的简写正则表达式。

const stripNonNumeric = str => str.replace(/\D/g,'');

(如果你正在使用状态)

const [val, setVal] = useState(stripNonNumeric(props.defaultValue));

const onChangeValue = (e) => {
   // this should be unnecessary if the field is already type="number",
   // but if its not then this use this, else just use e.target.value
   const value = stripNonNumeric(e.target);

   setVal(value);
};

return <input type="number" value={val} onChange={onChangeValue} />;

如果您从其他地方获得价值:

const value = props.valFromSomewhere;

return <input type="number" value={stripNonNumeric(value)} />;

【讨论】:

  • 是的,我已经有了一个数字状态。由于可读性,我想用一些撇号来显示它,但是@eux 的答案怎么说,这是不可能的。
  • @RobinAegerter 然后只使用字符串类型输入并处理该值以确保它是一个数字(就像我的第一个示例一样)有什么问题?
  • @ia-am-l 使用文本输入,您没有输入字段右侧两个箭头的优势,而且它不是移动设备的正确键盘。而且您还必须编写自己的验证;)
  • @RobinAegerter 我的意思是,您可以创建 2 个向上和向下按钮来模仿该行为。对于那个逻辑来说,逻辑不应该那么难,因为我已经为您提供了逻辑。但是如果你真的想使用 type=number,那么你不能。如果你真的想解决你的问题,我的建议是你可以做的替代方案。
  • @ia-am-l 谢谢。是的,这将是一个想法。但是这个解决方案无法解决手机上的键盘布局问题,因为无法从网络设置布局。
【解决方案3】:

将input type 用作number 对于rational/integers 而不是字符串 的值会更好。

因此,在您的情况下,您可以使用text 作为输入字段以获得更好的可读性,并且在 javascript 中您可以将该字符串转换为数字。

let num = document.getElementById("some-number").value;

num = num.replace(/\'/g,'');
num = parseInt(num,10);

console.log(num);
&lt;input type="text" value="4'000" id="some-number" /&gt;

【讨论】:

  • 我在this comment中描述的方式仍然是键盘布局的问题。
  • @RobinAegerter number 类型永远不会允许您拥有一些与数字无关的其他字符。
  • 是的,我知道了。我会把它留在那里(没有任何撇号)。不过谢谢!
  • @RobinAegerter 看到这个answer 它可能会指导你实现你的愿望。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
相关资源
最近更新 更多