2016-10-06 4 views
0

Я пытаюсь разрешить ТОЛЬКО буквы и пробелы.Regex, чтобы поймать ЛЮБОЙ небук, не номер, не пробел

нет _. ! ~ `

и любые другие специальные символы (я знаю, что _ должно быть письмо .. я просто не хотим его)

моего вопроса: как я должен написать это?

главным образом ив нашел ответившим, что указанные символы, которые являются «незаконными», как:

^[^$&+,:;[email protected]}{#|'\\<>\/.^*()%!\]\[~`_-]+[^$&+,:;[email protected]}{#|'\\<>\/.^*()%!\]\[~`_-]*$ 

но мне было интересно, если Theres лучший способ сделать это нравится:

^[a-zA-Z0-9\s]+[a-zA-z0-9\s]*$ 

проблема с это то, что если символы []^``_\ после буквы/цифры/пробела все еще проходят через

[]`\^_ <<this will be illegal 
1[]`\^_ <<this will not be caught as illegal 

Я также попытался: ^[\w\d\s]+[\w\d\s]*$

но позволяет _ пройти через

редактировать я имел опечатку во втором коде (Az), поэтому изменил его

^[a-zA-Z0-9\s]+[a-zA-Z0-9\s]*$ 

и она прекрасно работает

так лучше писать, как это, вместо того, чтобы набирать everysingle специальный chatacter (как первый код)? Возможны ли символы, которые могут проскальзывать по этой проверке?

+2

Является ли 'A-z' опечаткой в ​​вашем втором шаблоне или на самом деле там? Это может быть причина, по которой это не работает. –

+1

Посмотрите на определение '\ w', затем перепишите его расширение без подчеркивания –

+0

@SebastianProske it ** is ** причина –

ответ

-1

должен работать (исправленную/упрощенную версию вашего примера выше)

Если вы хотите включить все буквы (верхние и нижние) и любое число и только символ пробела:

^[a-zA-Z0-9 ]+$ 

Если вы хотите какое-либо пробельное:

^[a-zA-Z0-9\s]+$ 
+0

space **! = ** '\ s' –

+0

Я знаю, что это не то же самое, что пространство, но вопрос SpiderPool говорит« пробелы ». Пожалуйста, перечитайте вопрос перед тем, как меня отклонить. – bcampolo

+1

IMHO, * пробелы * больше, чем * whitespace *, он включает '\ t', например –

1

Если я правильно понял ваш вопрос, вы можете использовать отрицание класса символов, чтобы сделать это. Например, сопоставьте все символы, которые не являются буквами:

[^A-Za-z]+ 

Вы можете использовать якоря, чтобы соответствовать строки, которые содержат только буквы

^[^A-Za-z]+$ 

Если вы считаете, пробелы или пробелы (\s), как действительные, просто добавьте это к классу символов:

^[^A-Za-z\s]+$ 

, связанные с подходом «лучшим», вы можете сравнить производительность точно, но то, что лучший способ, если Performa nce не оказывает большого влияния, imho - наиболее читаемое выражение.

 Смежные вопросы

  • Нет связанных вопросов^_^