微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PCRE 的 ng 模式

如何解决PCRE 的 ng 模式

我有一个输入文本字段的模式:/[\p{L}\'.\- ]{3,30}/ 我的目的是接受世界上几个字母表(拉丁文、cirilicm 中文等)中最广泛的人名。它在 Regex101 和它很好用。在其他测试仪上不起作用,但我的主要问题如下:

<form action="mailto:myemail@emailserver.com" id="formula" method="post" enctype="multipart/form-data" 
name="formname" class="form-group pt-3" autocomplete="on" ng-submit="register()" novalidate>
<input type="text" name="nombre" ng-pattern="/[\p{L}\'.\- ]{3,30}/">

分享了我的代码供您检查:https://regex101.com/r/gOvO2M/8 它跳过特殊字符,跳过符号,跳过数字,但是当我在浏览器中看到 live html 时,它无法正常工作。

错误消息中,为了验证目的,我输入:

<p class="formu-error" ng-show="formname.nombre.$touched && formname.nombre.$invalid">Please,write a valid name.</p>

问题是在测试时,我只写了字母(没有空格,没有连字符,因为所有这些都是可选的)并且仍然给 mem 错误消息。为什么?

也许是因为我使用的是 \p{L} 并且仅在服务器中有效,当我在 PHP 中编写服务器验证时?

解决方法

你可以使用

<input type="text" name="nombre" ng-pattern="/^(?=.{3,30}$)\p{L}+(?:['.\s-]\p{L}+)*$/u" ng-trim="false" />

请注意 u 标志,它通过 ECMAScript 2018+ 支持启用 JavaScript 中的 Unicode 类别(属性)类支持。

此外,ng-trim="false" 将防止在将输入传递给正则表达式引擎之前修剪空格。

正则表达式的意思是:

  • ^ - 字符串的开始
  • (?=.{3,30}$) - 字符串必须由 3 到 30 个字符组成,而不是换行符
  • \p{L}+ - 一个或多个 Unicode 字母
  • (?:['.\s-]\p{L}+)* - 零次或多次重复
    • ['.\s-] - '.、空格或 -
    • \p{L}+ - 一个或多个 Unicode 字母
  • $ - 字符串结束。

参见regex demo

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。