密码Regex允许©;词尾符号

密码Regex允许©;词尾符号,regex,coldfusion,railo,Regex,Coldfusion,Railo,我使用下面的正则表达式来确保密码只有字母和数字字符 if(! reFind("^[[:alnum:][:punct:]]", this.password)) { this.addError(property="Password", message="Password must contain only letters, numbers, or punctuation marks."); } 如果我在单词的开头添加版权)字符,reFind会

我使用下面的正则表达式来确保密码只有字母和数字字符

if(! reFind("^[[:alnum:][:punct:]]", this.password)) {
                this.addError(property="Password", message="Password must contain only letters, numbers, or punctuation marks.");
            }
如果我在单词的开头添加版权
字符,reFind会阻止它;如果我把它加在单词的末尾,它就会通过。因此,
©abcd
不会通过,而
abcd©abcd
会通过


我想确保我的密码中只允许使用字母数字和标点符号。

试试这个:

if(!reFind("^[[:alnum:][:punct:]]+$", this.password))
试试这个:

if(!reFind("^[[:alnum:][:punct:]]+$", this.password))

正则表达式只是确保第一个字符是字母数字和/或标点符号。您希望确保每个字符都是字母数字和/或标点符号。您可以使用以下任一选项:

if(reFind("[^[:alnum:][:punct:]]", this.password))

if(! reFind("^[[:alnum:][:punct:]]*$", this.password))

(注意:它们与您的不同之处在于它们允许零长度密码。我认为这没问题,因为在这种情况下您需要给出不同的错误消息。)

正则表达式只确保第一个字符是字母数字和/或标点符号。您希望确保每个字符都是字母数字和/或标点符号。您可以使用以下任一选项:

if(reFind("[^[:alnum:][:punct:]]", this.password))

if(! reFind("^[[:alnum:][:punct:]]*$", this.password))

(注意:它们与您的不同之处在于它们允许零长度密码。我认为这没关系,因为在这种情况下,您需要给出不同的错误消息。)

为什么不能编写类似以下内容的代码:

^[0-9a-zA-Z]+$

为什么你不能写一些像:

^[0-9a-zA-Z]+$


这将不允许以下操作:
abc123
\w
包含标点符号?这是某种特殊的ColdFusion功能吗?
\w
不允许使用unicode字符,这是我的要求之一。这将不允许以下操作:
abc123
\w
包括标点符号?这是一种特殊的ColdFusion吗?
\w
不允许使用unicode字符,这是我的要求之一。“我想确保我的密码中只允许使用字母数字和标点符号。”@Kent,这也不允许使用unicode字符的重音符号。是的,我刚读了第1行,他没有提到标点符号(“我想确保我的密码中只允许字母数字和标点符号。”@Kent,这也不允许unicode字符中使用重音符号。是的,我刚读了第1行,他没有提到标点符号。:(“我想确保我的密码中只允许字母数字和标点符号。”-为什么!?没有正当的理由这么做。密码被加密了,所以它们包含的字符的类型和数量是不相关的。@彼得,我考虑过了。我正在加密所有的东西,不管怎样。我想在安全方面犯错,不必担心没有基于拉丁语的字符。我不明白它们在passwor中使用的含义ds.没有任何含义-您在注册和身份验证时使用相同的算法来加密密码,因此不管涉及什么字符或字符集-它只是加密算法的一个数据字符串。没有理由阻止它们。@Peter,很公平,因此如果我正确理解您的意思,没有任何问题这里需要正则表达式(除非我想强制我的用户使用特定的字符组合以获得额外的安全性)!而且数据库将不会出现任何问题…谢谢!是的。大多数加密算法都会输出十六进制数字,所以你只需要知道适当的长度就可以了。是的,你唯一需要的正则表达式是强制执行特定的复杂性-尽管在这方面也要小心,因为过于复杂的规则会鼓励人们使用相同的规则所有内容的密码(非常糟糕),允许一句话的单词可能比“P45$Word”之类的东西更安全(更容易记住)。“我想确保我的密码中只允许字母数字和标点符号。”-为什么!?没有正当的理由这么做。密码被加密了,所以它们包含的字符的类型和数量是不相关的。@彼得,我考虑过了。我正在加密所有的东西,不管怎样。我想在安全方面犯错,不必担心没有基于拉丁语的字符。我不明白它们在passwor中使用的含义ds.没有任何含义-您在注册和身份验证时使用相同的算法来加密密码,因此不管涉及什么字符或字符集-它只是加密算法的一个数据字符串。没有理由阻止它们。@Peter,很公平,因此如果我正确理解您的意思,没有任何问题这里需要正则表达式(除非我想强制我的用户使用特定的字符组合以获得额外的安全性)!而且数据库将不会出现任何问题…谢谢!是的。大多数加密算法都会输出十六进制数字,所以你只需要知道适当的长度就可以了。是的,你唯一需要的正则表达式是强制执行特定的复杂性-尽管在这方面也要小心,因为过于复杂的规则会鼓励人们使用相同的规则所有内容的密码(非常糟糕),允许一句话的单词可能比“P45$Word”之类的东西更安全(更容易记住)。