我有一个输入文本字段的模式:/[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演示。