【发布时间】:2021-07-10 10:12:39
【问题描述】:
我有一个输入文本字段的模式:/[\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>
问题是在测试时,我只写字母(没有空格,没有连字符,因为所有这些都是可选的)并且仍然给 mem 错误消息。为什么?
也许是因为我使用的是\p{L},当我在 PHP 中编写服务器验证代码时,它只能在服务器中工作?
【问题讨论】:
-
试试
ng-pattern="/^[\p{L}'. -]{3,30}$/u",我建议添加ng-trim="false"。 -
@WiktorStribiżew,谢谢,它在 html 形式(另存为 php)中运行良好。但是,它在开始时仍然接受很多空间。例如,我想允许名字或姓氏之间有空格,但开头不允许有多余的空格。我应该更好地使用 PHP 修剪功能在服务器上实现它吗?我真的不明白什么是
ng-trim="false"将完全工作。我只知道它不会自动修剪空格,但我没有找到视频解释清楚。 -
如果您不想在开头和结尾允许空格,您需要
ng-pattern="/^\p{L}[\p{L}'. -]{1,28}\p{L}$/u" ng-trim="false"。或者,如果您需要禁止连续的空格和撇号 -ng-pattern="/^(?=.{3,30}$)\p{L}+(?:['. -]\p{L}+)*$/u" ng-trim="false"
标签: regex validation angular-ngmodel ng-pattern html5-formvalidation