【问题标题】:validation using \p{L} in JavaScript regexp [duplicate]在 JavaScript 正则表达式中使用 \p{L} 进行验证 [重复]
【发布时间】:2015-07-16 09:16:38
【问题描述】:
**var pattern = /^[\p{L}0-9 @#'!&(),\[\].+/-]{1,100}$/;** \\first of all I din understand this pattern. someone plz explain it to me\\
if (!pattern.test(Name)) 
        {
            alert('Account Name must not contain the given values');
            Xrm.Page.getAttribute("name").setValue("");      
            return false;
             } 
        else
        {       
            return true;
        }

当我将此作为验证时,它会为我输入的所有值抛出错误消息。所以我需要一些关于我认为可以解决其余问题的模式的解释。

【问题讨论】:

  • 请检查my post,有$re 模式,您可以删除字符类中的第一个#0-9A-Za-z,以匹配除星体代码点之外的所有Unicode 字母。

标签: javascript regex


【解决方案1】:

在 Javascript 中,序列\p{L}(在字符类中)没有特殊含义;它仅表示字母p 或字母{ 或字符L 或字符}。您可能对XRegExp、另一个库或其他语言(例如Perl、PHP、.NET 等)支持所谓的Unicode 字符类别的正则表达式实现感到困惑。

【讨论】:

    【解决方案2】:

    改变

    /^[\p{L}0-9 @#'!&(),\[\].+/-]{1,100}$/
    

    /^[\p{L}0-9 @#'!&(),\[\].+\/-]{1,100}$/
    
                              ^^
    

    因为您已将斜杠/ 定义为分隔符,所以您必须转义它们。

    正则表达式的含义是,您的整个字符串必须在所列字符、数字和字母的 1 到 100 个字符之间。

    【讨论】:

    • p{L} 和 [a-zA-z] 是否相同?我读到 p{L} 是一个 Unicode,而 java 不接受 Unicode。如果两者都相同,那么我应该替换
    • 实际上,当它是字符类的一部分时,您不需要转义正斜杠。所以这不是 OP 的问题。
    • 我假设您的意思是 javascript 而不是 java。 p{L} 表示某种形式的“字母”。仅当您只有 ASCII 字符时,它才与 [a-zA-Z] 相同。
    • 在 JavaScript 中不能使用\p{L}(至少现在是这样)。
    猜你喜欢
    • 2018-10-15
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 2017-07-23
    • 1970-01-01
    • 2014-06-02
    相关资源
    最近更新 更多