我绝对没有使用正则表达式的经验,我需要一些帮助来设置一个匹配字符串。这是用于电话号码验证。我需要确保用户输入的字符串只有大写字母A-Z,数字0-9,打开/关闭括号[()]和连字符( - )。我也不知道我需要使用匹配或字符串的字符串方法。
答案 0 :(得分:1)
RegEx在网络上的解释很差。我不会因为询问更多关于它的一般性问题而对任何人提出过错,这与其他帖子不同,后者更具有形式 - 谷歌 - 逃避而非具体问题。你问过的人物:
[A-Z]
[0-9] or \d
\(
\)
-
/matchme/
是正则表达式文字。这比使用RegExp构造函数更好,因为你最终不得不逃避你的转义反斜杠,这会变得非常难看。
您可以在很多字符串方法中使用regEx文字,例如replace,split等。
如果没有特殊字符,任何非特殊字符都是关于匹配字符串中该位置的一个字符。 []
中的东西是一个类,可以匹配多个KIND字符,但只匹配最后一个位置匹配后该位置的字符。您可以[.-]用于识别电话号码的非数字字符。您还可以在字符类中表达范围,例如[a-hA-H]
或[4-9]
但是当你开始使用后续字符时,一次一个str位置就会消失:
? - one or none
* - 0 or many
+ - 1 or more
避免使用.
通配符。效率低下。出于某种原因,我怀疑为了效率而一直在组装中实现,它会检查每一种可能性,而不是它实际上不代表的1-2个电传类型空白字符,并且在计算机上没有诚实用途。更重要的是,性能更好的替代方案更强大,更有帮助。否定字符类要快得多。 [^<]*
表示任何非&lt;&lt;字符。
用于XML / SGML样式解析的非常方便的东西,尽管Stack上有很多人说过,但是regEx是完全可行的,它在技术上不再局限于“常规”语言。你必须要注意你所看到的东西,它允许像其他人的HTML一样多的邋iness,但这只是我书中的“呃”。
Crockford警告不要在JSlint中否定字符类。克罗克福德在这方面是非常错误的。它们不仅效率更高,而且还可以更容易地思考如何对内容进行标记。如果存在安全风险,您可以为与{}
括号匹配的字符数设置明确的限制,例如p{2,5}
- 匹配2到5个字符或{5}
正好5或{,5}
最多5个或{5,}
至少5个(我认为 - 测试最后两个)
你应该查找的其他随机内容:
(ph|f)
- ph或f - 有助于找到网络钓鱼和钓鱼(基本上不会上课时)
^
- 表示字符串的开头 - 将其视为下一个字符的条件而不是字符本身。是的,它也否定了角色类。
$
- 表示字符串的结尾 - 与上面相同的警告但是在前一个字符上。
\
- 用于转义特殊符号。注意:许多在字符类中没有意义的特殊符号不需要\
内的[]
\s\w\d
- 这些代表常用的字符集。第一个是几乎所有的空格(js样式转义通常具有regEx等价物),后跟w表示单词字符(类等效[a-zA-Z0-9_]
)和d表示数字[0-9]
。将这些中的任何一个大写完全相反。
还有更多,比如反向引用和前瞻,其用例场景值得了解,但这是我从常规体验(bwaahaahaa)中实际记忆的常用内容。
我认为你正在寻找非美国,因为你有A-Z的关注,而且我确信那里有很多美国电话号码注册,但我可能会为美国数据做这样的事情:
/\(?\d{3}[)\-. ]?\d{3}[\-. ]?\d{4}/
匹配: 123-456-7890
(123)456-7890
123.456.7890
123 456 7890
1234567890
但也许麻烦允许:
(123456.7890
...为了避免复杂性,我愿意与之共处。用一个表达来抵制这一切的诱惑。有时,例如,消除尾随/前导空格更清晰,然后使用表达式点击某些东西。拆分和连接方法非常强大,可用于标记
如果这与通常的regEx对话相似,有人会很快指出我错过的模式。所以,是的,测试他们的东西。有些网站可以让你设置表达式然后插入字符来尝试打破它们。