用于具有国际字符的名称的正则表达式

时间:2014-01-16 18:35:45

标签: javascript jquery regex

我正在使用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,所以这是它的“构建”正则表达式的片段:

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文件中我拥有的是这个(片段):

 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等。

任何人都可以帮我一把吗?感谢

4 个答案:

答案 0 :(得分:2)

我要回答我的问题,因为我能找出问题所在。

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

$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

中的pattern方法

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

Refernece link

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

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