ng-pattern for PCRE



我有一个输入文本字段的模式:/[p{L}'.- ]{3,30}/我的意图是接受世界上几个字母表上最广泛的人名(拉丁字母、西里尔字母、中文等(。它在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它跳过特殊字符,跳过符号,跳过数字,但当我在浏览器中看到实时HTML时,它无法正常工作。

在错误消息中,出于验证目的,我输入:

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

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

也许是因为我使用的是p{L},当我用PHP编写服务器验证代码时,它只在服务器中工作?

您可以使用

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

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

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

正则表达式的意思是:

  • ^-字符串的开头
  • (?=.{3,30}$)-字符串必须包含3到30个字符(换行字符除外(
  • p{L}+-一个或多个Unicode字母
  • (?:['.s-]p{L}+)*-零次或多次重复
    • ['.s-]-'.、空白或-
    • p{L}+-一个或多个Unicode字母
  • $—字符串结束

请参阅regex演示。

相关内容

  • 没有找到相关文章

最新更新