【问题标题】:What regular expression to use for name with international characters带有国际字符的名称使用什么正则表达式
【发布时间】:2014-02-05 20:25:03
【问题描述】:

我正在使用 codeigniter 在 php 中工作,我需要进行一些表单验证。具体来说,使用 Codeigniter 的验证表单库,我为名称字段编码:

        $this->form_validation->set_rules('name', 'Nombre', 'required|min_length[2]|max_length[50]|regex_match[/^([a-z,A-Z,á,é,í,ó,ú,â,ê,ô,ã,õ,ç,Á,É,Í,Ó,Ú,Â,Ê,Ô,Ã,Õ,Ç,ü,ñ,Ü,Ñ," "]+)$/]');

如您所见,它接受不同名称的国际字符。

现在我想在前面做同样的事情,在 jQuery 中制作相同的正则表达式。

我正在使用additional-methods.js 形式的模式方法,所以这是从中“构建”正则表达式的 sn-p:

jQuery.validator.addMethod("pattern", function(value, element, param) {
if (this.optional(element)) {
    return true;
}
if (typeof param === 'string') {
    param = new RegExp('^(?:' + param + ')$');
}
return param.test(value);
}, "Formato Inválido.");

然后在我的 js 文件中,我拥有的是这个 (sn-p):

 form2.validate({
            errorElement: 'span', //default input error message container
            errorClass: 'help-inline', // default input error message class
            focusInvalid: false, // do not focus the last invalid input
            ignore: "",
            rules: {                  
                name: {
                    minlength: 2,
                    maxlength: 50,
                    pattern: "[\s,.'-]*[a-zA-Z\pL][\s,.'-]*", //not working
                    required: true
                },

我尝试了许多正则表达式,但都不起作用。它还必须接受以下口音:mathías、damián 等。

谁能帮帮我?谢谢

【问题讨论】:

  • 试图“验证”名称是每个程序员一生中都会犯的基本错误之一。人类有完全合法的名字,不符合你的验证。见kalzumeus.com/2010/06/17/…
  • 我想这是相当主观的。有奇怪的名字,这是真的。但仅取决于它们来自哪里......在我的国家,你不会经常看到这种情况,因此需要这样的验证。另外,这不是我可以决定的,项目标准可以决定。
  • 我看不出这里争论的重点。你应该做适合你的事情,我应该做适合我和项目的事情。 xoxo

标签: javascript jquery regex


【解决方案1】:

Refernece link

/^[a-zA-Z\-_ ’'‘ÆÐƎƏƐƔIJŊŒẞÞǷȜæðǝəɛɣijŋœĸſßþƿȝĄƁÇĐƊĘĦĮƘŁØƠŞȘŢȚŦŲƯY̨Ƴąɓçđɗęħįƙłøơşșţțŧųưy̨ƴÁÀÂÄǍĂĀÃÅǺĄÆǼǢƁĆĊĈČÇĎḌĐƊÐÉÈĖÊËĚĔĒĘẸƎƏƐĠĜǦĞĢƔáàâäǎăāãåǻąæǽǣɓćċĉčçďḍđɗðéèėêëěĕēęẹǝəɛġĝǧğģɣĤḤĦIÍÌİÎÏǏĬĪĨĮỊIJĴĶƘĹĻŁĽĿʼNŃN̈ŇÑŅŊÓÒÔÖǑŎŌÕŐỌØǾƠŒĥḥħıíìiîïǐĭīĩįịijĵķƙĸĺļłľŀʼnńn̈ňñņŋóòôöǒŏōõőọøǿơœŔŘŖŚŜŠŞȘṢẞŤŢṬŦÞÚÙÛÜǓŬŪŨŰŮŲỤƯẂẀŴẄǷÝỲŶŸȲỸƳŹŻŽẒŕřŗſśŝšşșṣßťţṭŧþúùûüǔŭūũűůųụưẃẁŵẅƿýỳŷÿȳỹƴźżžẓ]$/.test(myString)

此正则表达式接受所有国际字符

【讨论】:

    【解决方案2】:

    很好的答案,但你的集合中缺少一些字符...我改用这个
    var pattern = "^([a-zÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ\\s])+$"

    【讨论】:

    • 谢谢我去试试! :) 我没有使用您使用的几个字符,因为我正在开发的网站指向说西班牙语的人,而且找到一个带有一些稀有字母的名字是很奇怪的。但是让我试试看我是否改变它!
    • 这是一个更简短的字符串,它实现了相同的目标。 IE。它包括在 ASCII 字符 192 到 255 的 ASCII 范围内出现的所有国际字符:@Limon@ghiscoding@user2932397([^A-zÀ-ÿ])(我省略了可能打算捕获空格的好奇 \\s但不会这样做,因为它实际上会转义 \ 以包含它并再次包含 s)
    • 谢谢我不知道À-ÿ 范围。 \\s 是因为模式被声明为字符串类型,所以它必须被转义并且它确实捕获了空格。
    【解决方案3】:

    我会回答我的问题,因为我可以找出问题所在。

    首先我尝试了一个我已经拥有的表达式,这是我之前写的那个:

    $this->form_validation->set_rules('name', 'Nombre', 'required|min_length[2]|max_length[50]|regex_match[/^([a-z,A-Z,á,é,í,ó,ú,â,ê,ô,ã,õ,ç,Á,É,Í,Ó,Ú,Â,Ê,Ô,Ã,Õ,Ç,ü,ñ,Ü,Ñ," "]+)$/]');
    

    将其移至 javascript 并没有按我的意愿进行验证,但错误出现在空格中:“”

    我只是用''替换了它,就是这样。所以我正在寻找的拉丁名字的最终正则表达式就在我眼前:

    pattern: "[a-z,A-Z,á,é,í,ó,ú,â,ê,ô,ã,õ,ç,Á,É,Í,Ó,Ú,Â,Ê,Ô,Ã,Õ,Ç,ü,ñ,Ü,Ñ,' ']+",
    

    使用additional-methods.js中的模式方法

    【讨论】:

      【解决方案4】:

      尝试使用 \un 通过它们的 unicode 字符表达式匹配它们,“匹配 n,其中 n 是表示为四个十六进制数字的 Unicode 字符。例如,\u00A9 匹配版权符号”。

      【讨论】:

      • 很抱歉,这超出了我的知识范围。我真的很陌生
      • 所有字符都有一个 unicode 表示,可以表示为四个十六进制数字。您需要找到要检查的字符的内容。你可以在任何 Windows 机器上使用 charmap.exe,或者像marathon-studios.com/unicode 这样的网站来找出这个问题。例如,á 是带有 Acute 的拉丁小写字母 A,即 00E1,所以要匹配这个,你可以使用 \u00E1 而不是 á
      • 或谷歌查找 unicode 表示。像这样:google.com/search?q=%C3%A1+unicode
      • 当然。但这对于数千个字符来说会不会太广泛了?不是更通用的方法来实现这一点吗?
      • 要匹配这个,你只需要其中的 26 个。 $this->form_validation->set_rules('name', 'Nombre', 'required|min_length[2]|max_length[50]|regex_match[/^([az,AZ,á,é,í,ó,ú, â,ê,ô,ã,õ,ç,Á,É,Í,Ó,Ú,Â,Ê,Ô,Ã,Õ,Ç,ü,ñ,Ü,Ñ," "]+)$/] ');
      猜你喜欢
      • 2011-07-15
      • 1970-01-01
      • 2011-08-23
      • 2012-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-15
      相关资源
      最近更新 更多