Javascript RegExp在移动iOS上无法识别撇号

时间:2019-08-29 14:12:28

标签: javascript ios regex

我有一个带有三个输入的表格。
第一个是唯一的数字,其他两个我可以接受从A到Z,空格和撇号的所有字母。

HTML

<input type="text" name="number" id="number"/>
<input type="text" name="name" id="name"/>
<input type="text" name="surname" id="surname"/>

JavaScript

$("body").on("click","#button",function(){

        let regexMessaggio = new RegExp("^[0-9]{1,5}$");
        if (!regexMessaggio.test($('#number').val())){
            alert("error");     
            return false;
        }

        let regexMessaggio2 = new RegExp("^[a-zA-ZÀ-ÿ ']{2,60}$");
        if (!regexMessaggio2.test($('#name').val())){
            alert("error");     
            return false;
        }
        if (!regexMessaggio2.test($('#surname').val())){
            alert("error"); 
            return false;
        }

        alert("OK");

    });

在台式机上的每个浏览器中,此代码均有效,但不适用于iOS。我已经尝试过chrome和safari,但无法识别撇号。

我还尝试使用以下方式更改正则表达式:
-“ ^([a-zA-ZÀ-ÿ'] {2,60})+ $”
-/ ^ [a-zA-ZÀ-ÿ'] {2,60} $ /
-“ [a-zA-ZÀ-ÿ'] {2,60}”

2 个答案:

答案 0 :(得分:1)

如果"Smart Punctuations"处于打开状态,则所有平直的单撇号将自动转换为卷曲的撇号。即使您可以访问UI文本输入字段的smartQuotesType属性,用户也可以在其中粘贴大括号,并且应该解决这些问题。

Regex and Smart Punctuation in iOS帖子中,作者建议在正则表达式中添加‘’

let regexMessaggio2 = /^[a-zA-ZÀ-ÿ ‘’']{2,60}$/;

或者,如果存在任何编码问题,请使用十六进制表示形式:

let regexMessaggio2 = /^[a-zA-ZÀ-ÿ \u2018\u2019']{2,60}$/;

请注意,当模式为静态(即您没有将任何变量传递给regex模式)时,regex文字符号(/.../)比RegExp构造函数符号更可取。

答案 1 :(得分:0)

感谢@WiktorStribiżew的帮助。
正确的字符串是new RegExp("^[a-zA-ZÀ-ÿ ‘’']{2,60}$")
我还发现this link可以提供帮助。