如何解决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 举报,一经查实,本站将立刻删除。