【问题标题】:PHP: preg_match( )PHP: preg_match()
【发布时间】:2015-03-24 22:50:55
【问题描述】:

这是我在这里的第一篇文章,我试图在论坛上查看,但我很困惑......我正在尝试验证名字,目前我的代码如下:

if(!preg_match("/^[a-zA-ZÀÁÂÄÆÃÅĀàáâäæãåāÈÉÊËĒĖĘèéêëēėęÎÏÍĪĮÌîïíīįìÔÖÒÓŒØŌÕôöòóœøōõÛÜÙÚŪûüùúūŸÿŚŠßśšŁłŽŹŻžźżzÇĆČçćčÑŃñń]*$/u", $fname))
{echo 'error';}

如您所见,我正在尝试包含所有带有重音符号等的特殊字符...嗯,我有 2 个问题...首先我不明白为什么我在测试特殊字符时仍然会出错,它似乎只有 a-zA-Z 范围有效,但我不明白我的错误在哪里...... 其次,我觉得用这么长的表达很笨,所以也许有人知道如何让这个简单和简短?

【问题讨论】:

  • 不验证名称,只检查字符串是否包含恶意代码。
  • 这是个坏主意。我曾经去过一个网站,该网站坚持认为我的电子邮件地址无效,因为它没有正确验证“.co.uk”。我无法使用该网站,所以我去了其他地方。如果有人告诉我我的名字“无效”,我会更快离开。
  • 正确的电子邮件地址验证是个好主意,但也建议保留姓名

标签: php regex validation preg-match special-characters


【解决方案1】:

如果您只想允许来自所有带有各种口音的脚本中的字母,这很简单:

^\p{L}+$

Demo\p{L} 表示任何语言的任何类型的字母

但这是个坏主意。真的。不要验证名称,因为你不能真正假设任何事情。阅读这篇文章:Falsehoods Programmers Believe About Names 了解原因。

【讨论】:

  • 了解这一点真的很有用。以前没用过。
  • 似乎 preg_match("/^\p{L}+$/", $fname) 仍然不起作用,在演示中它确实有效,但当我在我的页面上测试它时却没有.. .@卢卡斯
  • @Massimiliano 在引号中使用时必须转义反斜杠...preg_match("/^\\p{L}+$/", $fname)
  • @peter 不起作用 :-/ ,我也尝试转义反斜杠......我真的不明白我错在哪里......
  • @Massimiliano 用单引号试试:preg_match('/^\p{L}+$/', $fname)...我好久没做PHP了...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多