我对regexp有一个问题。我正在构建一个注册表单,您可以在其中输入全名(给定名称和姓氏)但是我不能使用[a-zA-Z]作为验证检查,因为这会排除所有具有“外国”字符的人。 / p>
在php和javascript中确保不输入符号的最佳方法是什么?
提前致谢!
答案 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中对客户端进行有限的检查,并且只检查服务器端的完整检查。