如何创建不允许符号的正则表达式?

时间:2009-02-19 15:22:04

标签: php javascript regex validation

我对regexp有一个问题。我正在构建一个注册表单,您可以在其中输入全名(给定名称和姓氏)但是我不能使用[a-zA-Z]作为验证检查,因为这会排除所有具有“外国”字符的人。 / p>

在php和javascript中确保不输入符号的最佳方法是什么?

提前致谢!

7 个答案:

答案 0 :(得分:2)

此问题的正确解决方案(一般情况下)是POSIX character classes。特别是,您应该可以使用[:alpha:](或[:alphanum:])来执行此操作。

虽然为什么要阻止用户输入他们的姓名?你确定你能够确切地告诉他们他们名字中允许的字符是什么吗?

答案 1 :(得分:1)

首先,您需要在概念上区分“外国”字符和“符号”。你可能需要在这里澄清一下。

其他语言的会计处理意味着会计其他代码页,这实际上超出了简单正则表达式的范围。它可以完成,但在更高的层次上,代码页必须工作。

答案 2 :(得分:1)

如果您严格要求正则表达式在标点符号和符号上失败,则可以使用[^[:punct:]],但我不确定[:punct:] POSIX类如何对某些奇怪的unicode符号作出反应。这当然会阻止某人将“John Smythe-Jones”作为他们的名字(因为' - '是一个标点字符),所以我可能会建议不要使用它。

答案 3 :(得分:1)

我认为这不是一个好主意。见How to check real names and surnames - PHP

答案 4 :(得分:0)

我不知道您将如何解释有效与否的问题,并且根据您的全球影响力,您可能无法在不锁定任何人的情况下删除任何内容。但谷歌搜索提出了这一点,这可能会有所帮助。

http://nadeausoftware.com/articles/2007/09/php_tip_how_strip_symbol_characters_web_page

答案 5 :(得分:0)

您可以遍历输入字符串并使用String.charCodeAt()函数来获取每个字符的整数字符代码。为自己设定一系列可接受的角色并进行比较。

答案 6 :(得分:0)

如上所述,POSIX角色类别可能是最好的选择。但是他们的支持(和替代方案)的细节与特定正则表达式变体的细节有很大不同。

PHP显然支持它们,但JavaScript

这意味着对于JavaScript,您需要使用字符范围:/ [\ u0400- \ u04FF] /匹配任何一个西里尔字符。显然,这需要一些写作,但不是XML 1.0推荐(来自W3C)包括许多范围的列表,虽然现在已经有几年了。

一种方法可能是在JavaScript中对客户端进行有限的检查,并且只检查服务器端的完整检查。