【问题标题】:html5 input type number with regex pattern in mobile在移动设备中使用正则表达式模式的 html5 输入类型编号
【发布时间】:2015-01-22 02:16:42
【问题描述】:

我正在尝试在输入类型number 中获取正则表达式模式以仅显示数字和点。 我尝试过这样的事情。

<input type="number" pattern="[0-9.]*">

<input type="tel">

两者都只显示数字 (0-9),但不显示 . (点)。我需要在输入字段中使用点。

可以通过 html5 实现吗?或者我应该使用 javascript 吗?

注意:这在 Android 中运行良好,但 . (点)不显示在 iphone 中

我需要像这样显示手机键盘..

对此有何帮助?

【问题讨论】:

  • 不确定移动浏览器,但默认情况下,某些浏览器不允许您在数字字段中输入十进制值,除非您指定 step="any"。但无论哪种方式,我认为您不能强制手机浏览器显示任何特定的移动键盘。
  • 如何强制手机浏览器显示任何特定的手机键盘?有什么想法吗?
  • 你不能。您能做的最好的事情就是尝试制作自己的虚拟键盘,但这是一个可怕的想法。移动系统会决定它自己的键盘,你唯一能影响它的就是你的 type="",这对你来说显然是不够的
  • 问题出在键盘软件上,三星手机和三星键盘也有类似情况。
  • . 不是正则表达式通配符吗?你试过逃避吗? [0-9\.]*

标签: ios css html numpad


【解决方案1】:

如果您只指定“type=number”,它将在 iPhone 上显示键盘,如:

如果您指定 &lt;input type="number" pattern="\d*"/&gt;&lt;input type="number" pattern="[0-9]*" /&gt; 之类的模式,那么 iPhone 上的键盘将类似于:

还是不能显示点(.),目前没有处理这种情况的模式。

所以您可以选择&lt;input type="tel" /&gt;,它将提供如下键盘:

有关 iOS 输入的更多详细信息,请参阅以下链接:

http://bradfrost.com/blog/mobile/better-numerical-inputs-for-mobile-forms/

http://blog.pamelafox.org/2012/05/triggering-numeric-keyboards-with-html5.html

https://about.zoosk.com/nb/engineering-blog/mobile-web-design-use-html5-to-trigger-the-appropriate-keyboard-for-form-inputs/

http://mobiforge.com/design-development/html5-mobile-web-forms-and-input-types

http://www.petefreitag.com/item/768.cfm

http://html5tutorial.info/html5-contact.php

希望这会对您有所帮助。 :)

自定义更新(参考:https://stackoverflow.com/a/20021657/1771795

您可以使用 javascript 进行一些自定义。 让我们以带小数模式的货币输入为例,其中输入e.which 以读取CharCode,然后将其推入一个数组(之前),该数组表示小数点之前的数字,另一个数组(之后)从(之前)数组中移动值超过小数点。

complete fiddle link

HTML:

<input type="tel" id="number" />

JS

变量和函数:

// declare variables
var i = 0,
    before = [],
    after = [],
    value = [],
    number = '';

// reset all values
function resetVal() {
    i = 0;
    before = [];
    after = [];
    value = [];
    number = '';
    $("#number").val("");
    $(".amount").html("");
}

// add thousand separater
function addComma(num) {
  return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}

主要代码:

// listen to keyup event
$("#number").on("keyup", function (e, v) {

    // accept numbers only (0-9)
    if ((e.which >= 48) && (e.which <= 57)) {

        // convert CharCode into a number   
        number = String.fromCharCode(e.which);

        // hide value in input
        $(this).val("");

        // main array which holds all numbers
        value.push(number);

        // array of numbers before decimal mark
        before.push(value[i]);

        // move numbers past decimal mark
        if (i > 1) {
            after.push(value[i - 2]);
            before.splice(0, 1);
        }

        // final value
        var val_final = after.join("") + "." + before.join("");

        // show value separated by comma(s)
        $(this).val(addComma(val_final));

        // update counter
        i++;

        // for demo
        $(".amount").html(" " + $(this).val());

    } else {

        // reset values
        resetVal();
    }
});

重置:

// clear arrays once clear btn is pressed
$(".ui-input-text .ui-input-clear").on("click", function () {
    resetVal();
});

结果:

【讨论】:

  • 这些我都知道。我需要在数字键盘中显示 (.)。怎么可能?
  • 如果您在真正的 iOS 应用程序中执行此操作,您可能会在键盘顶部添加自己的按钮,基于 stackoverflow.com/questions/5824325/…,这是关于附件视图但相同的过程会工作的。
  • 另外请通过链接供JS使用stackoverflow.com/questions/24407109/…
  • 请阅读上述链接问题的评论。您的解决方案不适用于 iPhone(使用 iOS7 或 iOS8 测试),因为在 iPhone 上会显示 0-9 虚拟键盘,没有普通的移位键盘(取而代之的是带有 [+*#] 键且没有 [.] 或 [,] 键可用的 0-9 键盘)。
  • 这种自定义似乎不适用于 iPhone :(
【解决方案2】:

并非所有浏览器都支持每种输入类型和属性。一般来说,来自 IE10+ 的大多数现代浏览器都包含电子邮件和号码等基础知识。

浏览器将在特定类型时恢复为标准文本输入,而在不支持这些值时忽略属性。

所以你应该使用一个好的正则表达式模式。

例如

<input type="tel" name="tel" pattern="^(?:\(\d{3}\)|\d{3})[- . ]?\d{3}[- . ]?\d{4}$" />
  • 1234567899
  • 123 456 7899
  • 123-456-7899
  • 123.456.7899

支持

“tel”类型的浏览器支持

  • Android (是)
  • iOS (是)
  • IE (是)
  • 移动(是)
  • 歌剧(是的)
  • 移动(是)
  • 歌剧(是的)
  • 经典(是)
  • Opera Mini (否)
  • 火狐(是)
  • 移动(是)
  • Chrome for Android (是)

(来源:caniuse.com、DeviceAtlas、mobilehtml5.org)

模式属性的浏览器支持

但在 Internet Explorer 10、Firefox、Opera 和 Chrome 中支持 pattern 属性。 Internet Explorer 9 及更早版本,或 Safari 不支持。

【讨论】:

  • 尽管该模式可能支持小数,但遗憾的是 ios 上的 tel 键盘没有小数键。
【解决方案3】:

很遗憾,无法实现您正在寻找的确切功能。然而,有一种“hack”可以提供类似的功能:

http://www.brownphp.com/2011/05/iphone-currency-input-web-apps/(链接断开)

这是一点 JS,当用户开始输入时会自动填充小数点,像这样: 0.01 -> 0.12 -> 1.23 -> 12.34 。所以这可以用于类似的效果。

【讨论】:

    【解决方案4】:

    我有一个类似的场景,我需要同时支持逗号和点作为小数点和数字分组[see here]

    例如

    1.00 / 1,00
    1,000,000.00 / 1.000.000,00

    同时该场景要求在移动设备上显示数字键盘。

    最初的实现结合了“数字”类型和模式属性。

    <input type="number" pattern="^(0*[,.]*[0-9][0-9]*([,.][0-9]+)*|[0-9]?[,.][0-9]*[1-9][0-9]*)$" required />
    

    但是,数字验证失败了模式允许的输入。这意味着该字段和表单被标记为无效。

    解决方案是将类型更改为“tel”。

    <input type="tel" pattern="^(0*[,.]*[0-9][0-9]*([,.][0-9]+)*|[0-9]?[,.][0-9]*[1-9][0-9]*)$" required />
    

    移动用户现在会默认看到一个数字键盘,并且模式验证将用于验证输入。

    【讨论】:

      【解决方案5】:

      对于 iOS,请使用输入属性 type="number"inputmode="decimal"。 这将在 iOS 12.3+ 上显示带有“点”的数字键盘。

      【讨论】:

      • 作为参考,因为我今天点击了这个......使用&lt;input type="number" inputmode="decimal" /&gt;确实可以在iOS Safari中显示带有小数点的数字键盘,即:UIKeyboardType.decimalPad。不过,在 iOS Cordova 应用程序中(可能是由于 WKWebView 的差异),您会得到类似 qwerty 的数字键盘,即:UIKeyboardType.numbersAndPunctuation
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 2012-08-17
      相关资源
      最近更新 更多